Menulis konverter suhu sederhana terdengar sepele sampai Anda menyadari betapa mudahnya logika dasar rusak. Anda memulai dengan perulangan sementara, membuat tabel Fahrenheit-ke-Celcius, dan semuanya tampak baik-baik saja. Namun kemudian Anda memerlukan titik data tertentu—seperti suhu tubuh manusia—dan tiba-tiba kode bersih Anda berubah menjadi mimpi buruk proses debug.
Berikut adalah gambaran nyata tentang cara kerja perulangan di C, mengapa presisi penting, dan cara menghentikan program Anda agar tidak terhenti selamanya.
Dasar-dasar: Loop Integer
Mari kita lihat versi yang paling sederhana. Anda ingin mencetak tabel dari 0 hingga 100 derajat Fahrenheit, melonjak 10 detik. Anda menggunakan bilangan bulat int untuk penghitung a.
Jalankan ini, dan Anda mendapatkan jaringan yang bersih:
Ini fungsional. Ini cepat. Tapi itu jelek. Mengapa? Karena pembagian bilangan bulat memotong desimal. (a - 32) * 5/9 menghilangkan bagian pecahan sebelum dicetak. Jika Anda membutuhkan akurasi, Anda memerlukan angka floating-point.
Presisi Titik Mengambang
Beralih ke float akan mengubah perhitungannya. Anda juga perlu menukar penentu format dari %d ke %f. Kode di bawah ini menggunakan %6.2f, yang memberitahukan printer untuk menyisihkan enam spasi, menyisakan dua digit setelah koma desimal.
Sekarang outputnya memiliki tempat desimal yang sebenarnya. Itu terlihat profesional. Namun bagaimana jika Anda membutuhkan nilai spesifik yang tidak sesuai dengan pola?
Bug Suhu Tubuh
Bayangkan Anda ingin memasukkan 98,6°F (suhu tubuh normal manusia) ke dalam tabel itu. Itu tidak berlaku pada kelipatan 10. Jadi, Anda menambahkan pernyataan if.
Ini berfungsi untuk 100. Namun ubah batas loop menjadi 200, dan logikanya runtuh. Kondisi if (a > 98.6) tetap berlaku untuk setiap iterasi berikutnya. Anda akan mencetak 98,6°F berulang kali.
Mengapa ini terjadi? Karena kondisinya memeriksa apakah angka saat ini lebih besar dari 98,6. Sekali a mencapai 100, maka akan selalu lebih besar dari 98,6. Anda tidak memeriksa apakah Anda baru saja lulus. Anda sedang memeriksa apakah Anda melampauinya.
Cara Mengatasinya: Status Pelacakan
Untuk memperbaikinya, Anda perlu mengingat nilai sebelumnya. Anda memperkenalkan variabel kedua, b, yang diinisialisasi ke -1.
Sekarang logikanya masuk akal. Ini hanya mencetak baris tambahan jika a saat ini di atas 98,6 DAN b sebelumnya di bawah 98



















