C语言温度分析程序求助:合法输入仍提示值不正确
问题排查与修复方案
我一眼就揪出了问题的核心,咱们一步步拆解来看:
1. 最致命的错误:while循环后的多余分号
你代码里的这一行:
while (high > 40 || low < -40 || high < low);
末尾的分号是罪魁祸首!这个分号会让while循环变成一个空循环体——不管条件是否成立,循环都会执行空操作,然后直接跳到后面的大括号里执行错误提示。哪怕你输入的数值完全符合要求,这个错误提示也会被触发,因为大括号里的代码和while循环没有任何关联,是无条件执行的。
2. 次要语法问题:宏定义写错了
第一行的#define NUMS3是语法错误,规范写法应该是#define NUMS 3(宏名和数值之间要加空格)。不过你代码里循环用的是i < 4,刚好对应3次循环,所以这个暂时没影响,但还是建议修正成规范写法,方便后续维护。
3. 逻辑缺失:错误提示后没有重新输入数值
就算去掉了分号,原代码还有个问题:当输入错误时,只会弹出提示,但不会让用户重新输入正确的数值,循环会一直卡在错误条件里,陷入死循环。
修正后的完整代码
#define NUMS 3 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int high, low; int main(void) { printf("---=== IPC Temperature Analyzer ===--- \n"); for (int i = 1; i <= NUMS; i++) { // 用宏定义控制循环次数更灵活 printf("Enter the high value for day %d:", i); scanf("%d", &high); printf("Enter the low value for day %d:", i); scanf("%d", &low); // 移除分号,把错误处理和重新输入逻辑放进循环体 while (high > 40 || low < -40 || high < low) { printf("Incorrect values, temperatures must be in the range -40 to 40, high must be greater than low.\n"); // 重新提示用户输入正确数值 printf("Enter the high value for day %d:", i); scanf("%d", &high); printf("Enter the low value for day %d:", i); scanf("%d", &low); } } return 0; }
关键修正点总结
- 移除while循环末尾的分号,让大括号内的代码成为循环体的一部分,只有当条件成立时才执行错误提示
- 修正宏定义的语法错误,让代码更规范
- 在while循环内部添加重新输入的逻辑,确保用户输入正确数值后才能进入下一天的输入
这样修改后,程序就能正常判断数值合法性,只有输入不符合要求时才会弹出提示,并要求重新输入,直到输入正确为止。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

