CS50中C语言&&语法问题:输入验证单循环实现求助
解决C语言输入范围验证的循环合并问题
嘿,我刚看了你的问题,其实你想把两个验证循环合并成一个的思路完全没问题,只是可能在条件逻辑上搞混了~咱们来一步步理清楚:
你遇到的核心问题
你原本用两个循环分别检查n < 0和n >=24,但尝试用&&合并时没成功,大概率是因为错误地把循环条件写成了n < 0 && n >=24——这两个条件永远不可能同时成立,所以循环根本不会执行,直接跳过验证步骤,导致n还是初始的-1,不符合要求。
正确的合并方式(两种写法)
我们的目标是:只要输入的数字不在0到23之间,就继续请求用户输入,所以可以用两种方式实现:
方式1:用逻辑或(||)直接写不符合的条件
这是最直观的写法,直接判断“小于0 或者 大于等于24”:
#include <stdio.h> #include <cs50.h> int main(void) { int n = -1; // 初始值设为不符合范围的数,确保第一次循环执行 while (n < 0 || n >= 24) { n = get_int("请输入一个0到23之间的整数:"); } // 后续逻辑(比如打印CS50的金字塔) printf("有效输入:%d\n", n); return 0; }
方式2:用逻辑与(&&)配合取反(!)实现
如果你确实想用到&&,可以先判断“数字在0到23之间”的条件,再取反,这样循环就会在数字不符合要求时继续执行:
#include <stdio.h> #include <cs50.h> int main(void) { int n = -1; // 取反“n大于等于0 且 小于等于23”的条件 while (!(n >= 0 && n <= 23)) { n = get_int("请输入一个0到23之间的整数:"); } printf("有效输入:%d\n", n); return 0; }
一些小提示
- CS50的
get_int()函数会自动处理非整数的输入(比如用户输入字母时,会提示重新输入),所以你不用额外写代码处理这种情况 - 测试时记得覆盖边界值:输入
0、23(应该通过),输入-1、24(应该被拒绝,重新请求输入)
内容的提问来源于stack exchange,提问作者Hugh_Kelley
相关产品推荐
相关产品推荐

