C语言do-while循环条件疑问:输入[0,10]区间数值遇逻辑困惑
问题解答:do-while循环条件的逻辑误区
核心问题:你搞反了do-while循环的执行规则
do-while是先执行一次循环体,再判断条件:如果条件为真,就重复执行循环体;条件为假,就退出循环。原条件的问题所在
你写的while (nmbr >= 0 && nmbr <= 10),意思是:只要输入的数在[0,10]区间内,就继续循环(继续让用户输入)。这和你的需求完全相反——你本来想让输入符合要求时停止,结果符合要求时反而一直重复输入提示,直到输入不符合区间的数才退出,最后打印的也是不符合要求的数,自然“无法正常工作”。反向条件生效的原因
改成while (nmbr < 0 || nmbr > 10)后,逻辑变成:只要输入的数不在[0,10]区间内,就继续循环(重新提示输入)。一旦输入符合要求的数,条件就为假,循环直接退出,正好实现了“获取[0,10]区间输入”的目标。修正后的代码示例
#include <stdio.h> int main () { int nmbr; do { printf("Enter a number within the interval [0, 10]: \n"); scanf("%d", &nmbr); } while (nmbr < 0 || nmbr > 10); // 用区间外的判断作为循环继续的条件 printf("The number is: %d", nmbr); return 0; }
内容的提问来源于stack exchange,提问作者Mil Pool
相关产品推荐
相关产品推荐

