输入无效时间单位时陷入无限循环问题求助
问题根源分析
你遇到的无限循环问题完全是那条if判断的逻辑出了错!咱们来拆解一下:
原条件代码:
if (timeUnit !='h' || timeUnit !='H' || timeUnit !='d' || timeUnit !='D' || timeUnit !='y' || timeUnit !='Y')
这里用了逻辑或(||),这意味着只要其中一个条件成立,整个判断就为真。但你仔细想:
- 哪怕输入的是合法字符
h,它也不等于H、d、D这些其他合法值,所以这个表达式的结果永远是true - 不管你输入什么字符,总有几个条件是成立的,所以这条if会一直触发,程序也就陷入了无限循环的错误提示里
修正方案
把逻辑或(||)改成逻辑与(&&),这样只有当输入的字符同时不等于所有合法值时,才会触发错误提示:
修正后的完整示例代码:
#include <stdio.h> #include <stdlib.h> // 补全你提到的<stdli...>应该是stdlib.h int main() { char timeUnit; // 输入循环逻辑 do { printf("请输入时间单位(h/d/y,大小写均可):"); scanf(" %c", &timeUnit); // 前面加空格跳过换行、空格等空白字符,避免读取错误 // 修正后的判断条件 if (timeUnit !='h' && timeUnit !='H' && timeUnit !='d' && timeUnit !='D' && timeUnit !='y' && timeUnit !='Y') { printf("错误:请输入合法的时间单位!\n"); } } while (timeUnit !='h' && timeUnit !='H' && timeUnit !='d' && timeUnit !='D' && timeUnit !='y' && timeUnit !='Y'); // 后续的放射性计算代码... return 0; }
额外优化建议
如果想让代码更简洁,还可以把输入的字符统一转成小写(或大写)后再判断,减少重复的条件:
#include <stdio.h> #include <stdlib.h> #include <ctype.h> // 用于tolower()函数 int main() { char timeUnit; do { printf("请输入时间单位(h/d/y,大小写均可):"); scanf(" %c", &timeUnit); char lowerUnit = tolower(timeUnit); if (lowerUnit != 'h' && lowerUnit != 'd' && lowerUnit != 'y') { printf("错误:请输入合法的时间单位!\n"); } } while (tolower(timeUnit) != 'h' && tolower(timeUnit) != 'd' && tolower(timeUnit) != 'y'); // 后续计算逻辑... return 0; }
这样代码更清爽,也不容易再写错逻辑运算符。
内容的提问来源于stack exchange,提问作者Aqeelles
相关产品推荐
相关产品推荐

