do while循环中的if语句失效问题排查求助
问题:输入范围判断的if语句失效,else分支永远不执行
问题根源
你的if条件逻辑错误,误用了逻辑或(||)而非逻辑与(&&):
if (num < 256 || num >= 0)
这个条件对所有整数都成立——任何数字要么小于256,要么大于等于0,因此else分支永远不会触发,看起来就像if语句被忽略了。
修正方案
将条件改为同时满足num >= 0和num < 256,用逻辑与连接:
if (num >= 0 && num < 256)
修正后的完整代码
另外注意exit是C标准库的函数名,建议改用其他变量名避免冲突,同时增加输入错误的处理(比如输入非数字时清空缓冲区):
#define _CRT_SECURE_NO_DEPRECATE 1 #define _CRT_NONSTDC_NO_DEPRECATE 1 #include <stdio.h> #include <conio.h> #include <Windows.h> int main(void) { int num; int exit_key; // 替换原exit变量名,避免和标准库函数冲突 exit_key = 0; printf("\nLab5 p1 by Chung - En Hou\n"); num = 0; do{ printf("\nEnter a number between 0 and 255:"); // 处理输入非数字的情况 if (scanf("%d", &num) != 1) { // 清空输入缓冲区的垃圾数据 while (getchar() != '\n'); printf("\nInvalid input! Please enter an integer.\n"); printf("\nPress any button to try again or press Esc to exit\n"); exit_key = getch(); continue; } // 正确的范围判断条件 if (num >= 0 && num < 256) { Sleep(250); printf("%d\n", num); Sleep(250); printf("%x\n", num); Sleep(250); printf("%c\n", num); printf("Press any button to run the program again or press Esc to exit\n"); exit_key = getch(); } else { printf("\nThat number is invalid, please try again\n"); printf("\nPress any button to try again or press Esc to exit\n"); exit_key = getch(); } } while (exit_key != 27); return 0; }
额外说明
- 输入非数字时,
scanf会返回非1的值,此时需要清空输入缓冲区,避免后续循环一直读取错误数据 - 变量名避免使用C标准库中的函数名(比如
exit),防止命名冲突
内容的提问来源于stack exchange,提问作者jonathan hou
相关产品推荐
相关产品推荐

