C语言华氏度与摄氏度互转计算器故障求助
帮你排查C语言温度转换计算器的问题
嘿,我来帮你看看这个温度转换程序的问题哈,几个关键细节没处理对,导致程序没法正常工作,咱们一个个说:
- 字符串比较不能用
==:C语言里字符串本质是字符数组,==只会比较两个数组的内存地址,不会对比内容。得用strcmp()函数来做字符串内容比较,记得要包含<string.h>头文件。 - 转换公式计算时机错误:你现在是先计算
fahrenheit和celsius,但这时候temp还没被用户输入,值是随机的垃圾值,肯定得不到正确结果。得先让用户输入温度,再计算转换值。 fgets的数组大小不够:你声明的answer[2]只能存1个字符加终止符,而"CF"或"FC"是2个字符,得把数组设成至少3个元素(比如char answer[3];),这样fgets才能完整读取输入的两个字符。另外,fgets会把输入末尾的换行符也读进去,最好加一步去掉换行符的处理,避免影响后续比较。- 拼写小错误:提示文字里的
celcius应该是celsius,虽然不影响运行,但规范一点更好~
接下来是修正后的完整代码:
#include <stdio.h> #include <string.h> // 引入strcmp需要的头文件 int main() { double temp; char answer[3]; // 足够存"CF"/"FC"加上终止符 printf("Type 'CF' if you want to convert from celsius to fahrenheit, and 'FC' if you want to convert from fahrenheit to celsius: "); fgets(answer, sizeof(answer), stdin); // 去掉fgets读取到的换行符(如果有的话) size_t len = strlen(answer); if (len > 0 && answer[len-1] == '\n') { answer[len-1] = '\0'; } if(strcmp(answer, "CF") == 0){ printf("Type the temperature here: "); scanf("%lf", &temp); // 输入后再计算转换值 double fahrenheit = (temp * 1.8) + 32; printf("Answer: %.2f\n", fahrenheit); // 用%.2f控制小数位数更美观 } else if(strcmp(answer, "FC") == 0){ printf("Type the temperature here: "); scanf("%lf", &temp); double celsius = (temp - 32) * 5.0/9.0; // 用5/9比0.5556更精确 printf("Answer: %.2f\n", celsius); } else { // 增加错误提示,处理用户输入不符合要求的情况 printf("Invalid input! Please enter 'CF' or 'FC'.\n"); } return 0; }
额外提两个小优化:
- 用
5.0/9.0代替0.5556,这样转换结果更精确,因为0.5556是近似值。 - 增加了错误输入的处理,当用户输入不是"CF"或"FC"时给出提示,程序更健壮。
内容的提问来源于stack exchange,提问作者Ralph Daniel Honra




