Escrever um conversor de temperatura simples parece trivial até você perceber como a lógica básica quebra facilmente. Você começa com um loop while, cria uma tabela de Fahrenheit para Celsius e tudo parece bem. Mas então você precisa de um ponto de dados específico, como a temperatura do corpo humano, e de repente seu código limpo se transforma em um pesadelo de depuração.
Aqui está uma visão real de como o loop funciona em C, por que a precisão é importante e como impedir que seus programas sejam interrompidos para sempre.
O Básico: Loops Inteiros
Vejamos a versão mais simples possível. Você deseja imprimir uma tabela de 0 a 100 graus Fahrenheit, saltando 10s. Você usa um número inteiro int para o contador a.
Execute isso e você obterá uma grade limpa:
É funcional. É rápido. Mas é feio. Por que? Porque a divisão inteira trunca os decimais. (a - 32) * 5/9 elimina a parte fracionária antes de imprimir. Se precisar de precisão, você precisará de números de ponto flutuante.
Precisão de ponto flutuante
Mudar para float altera a matemática. Você também precisa trocar o especificador de formato de %d para %f. O código abaixo usa %6.2f, que instrui a impressora a reservar seis espaços, mantendo dois dígitos após a vírgula decimal.
Agora a saída tem casas decimais reais. Parece profissional. Mas e se você precisar de um valor específico que não se enquadre no padrão?
O bug da temperatura corporal
Imagine que você deseja inserir 98,6°F (temperatura normal do corpo humano) nessa tabela. Não chega a um múltiplo de 10. Então você adiciona uma instrução if.
Funciona para 100. Mas mude o limite do loop para 200 e a lógica entra em colapso. A condição if (a > 98.6) permanece verdadeira para cada iteração subsequente. Você imprimirá 98,6°F repetidamente.
Por que isso acontece? Porque a condição verifica se o número atual é maior que 98,6. Quando a atingir 100, será sempre maior que 98,6. Você não está verificando se acabou de passar. Você está verificando se está além disso.
A correção: estado de rastreamento
Para corrigir isso, você precisa se lembrar do valor anterior. Você introduz uma segunda variável, b, inicializada com -1.
Agora a lógica é sólida. Ele só imprime a linha extra se a estiver atualmente acima de 98,6 E b estiver anteriormente abaixo de 98



















