Writing a simple temperature converter sounds trivial until you realize how easily basic logic breaks. You start with a while loop, you crank out a Fahrenheit-to-Celsius table, and everything seems fine. But then you need a specific data point—like human body temperature—and suddenly your clean code turns into a debugging nightmare.
Here is a real-world look at how looping works in C, why precision matters, and how to stop your programs from hanging forever.
The Basics: Integer Loops
Let’s look at the simplest possible version. You want to print a table from 0 to 100 degrees Fahrenheit, jumping by 10s. You use an integer int for the counter a.
Run this, and you get a clean grid:
It’s functional. It’s fast. But it’s ugly. Why? Because integer division truncates decimals. (a - 32) * 5 / 9 drops the fractional part before printing. If you need accuracy, you need floating-point numbers.
Floating Point Precision
Switching to float changes the math. You also need to swap the format specifier from %d to %f. The code below uses %6.2f, which tells the printer to reserve six spaces, keeping two digits after the decimal point.
Now the output has actual decimal places. It looks professional. But what if you need a specific value that doesn’t fit the pattern?
The Body Temperature Bug
Imagine you want to insert 98.6°F (normal human body temperature) into that table. It doesn’t land on a multiple of 10. So you add an if statement.
It works for 100. But change the loop limit to 200, and the logic collapses. The if (a > 98.6) condition stays true for every subsequent iteration. You’ll print 98.6°F over and over again.
Why does this happen? Because the condition checks if the current number is greater than 98.6. Once a hits 100, it will always be greater than 98.6. You aren’t checking if you just passed it. You’re checking if you are beyond it.
The Fix: Tracking State
To fix this, you need to remember the previous value. You introduce a second variable, b, initialized to -1.
Now the logic is sound. It only prints the extra line if a is currently above 98.6 AND b was previously below 98



















