提问人:Mil Pool 提问时间:4/2/2023 最后编辑:John BollingerMil Pool 更新时间:4/2/2023 访问量:103
C 中的 do while 循环:while 条件问题
do while loop in C: problem with while condition
问:
好吧,我觉得自己真的很愚蠢,也许我错过了一些东西,但我正在浏览我大学的一些材料,并且有一个关于输入 [0, 10](含)之间的数字并计算出数字的阶乘的问题代码。
材料中的代码:
#include <stdio.h> int main(void) { int b, i; int f = 1; do { printf("Input a number within a set [0, 10]: "); scanf ("%d", &b); } while (b < 0 || b > 10); for (i = 2; i <= b; i++) f *= 1; printf("Factorial of the number %d (%d!) is: %d", f); return 0; }
现在,我想指出,我真的是所有这些的初学者,但这看起来并不对劲,当我运行它(在 CodeBlocks 中)时,它显示了一个错误。
然后我想尝试自己写出代码,但我发现自己在 - 循环中挣扎,特别是循环部分的条件。do
while
while
我想一点一点地测试代码,这就是我写的:
#include <stdio.h>
int main () {
int nmbr;
int i;
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;
}
现在,我的问题是,既然字面意思是大于或等于零和小于或等于 10 的每个数字——这意味着字面意思是 0 到 10 之间的每个数字,包括一个 0 和一个 10,为什么代码不起作用?nmbr >= 0 && nmbr <= 10
nmbr
如果我放,它可以工作,但这不对,是吗?当它说它严格小于零或严格大于 10 的每个数字时,它怎么还能包含零或十?我是否遗漏了一些非常明显的东西?nmbr < 0 || nmbr > 10
总的来说,我试图让输入只在 0 到 10 之间(包括两者),我猜我正在为语法而苦苦挣扎。
答:
循环将在 介于两者之间并包含时执行。你希望它结束。此外,它不是.nmbr
0
10
nmbr
nbmr
int nmbr;
int i;
do {
printf("Enter a number within the interval [0, 10]: \n");
scanf("%d", &nmbr); /* not nbmr */
} while (!(nmbr >= 0 && nmbr <= 10)); /* or, while (nmbr < 0 || nmbr > 10) */
printf("The number is: %d\n", nmbr);
评论
scanf()
第一个代码示例中的循环一遍又一遍地提示并读取用户的输入,直到读取可接受的输入。 是执行循环的另一次迭代的条件。也就是说,小于零或大于 10 的值将被拒绝,这正是您所说的。while
b < 0 || b > 10
b
现在,我的问题是,因为字面意思是 即大于或等于零的每个数字 AND 小于或等于 10 - 这意味着从字面上看是每个数字 介于 0 和 10 之间,包括 0 和 10,为什么代码不是 加工?
nmbr >= 0 && nmbr <= 10
nmbr
因为你弄错了测试的意义。当条件计算结果为 true 时,表示应执行循环的另一次迭代,从而拒绝当前输入。第一个代码中的条件适用于此。
我是否遗漏了一些非常明显的东西?
似乎是这样。见上文。
旁注:在第一个代码中,这个......
f *= 1;
...肯定是错的。它看起来像 OCR 或转录错误。预期的代码无疑是
f *= i;
评论
do { ... scanf("%d", &nmbr); } while (nmbr>= 0 && nmbr<= 10);
->for (;;) { ... if (scanf("%d", &nmbr) != 1) return 1; if (nmbr>= 0 && nmbr<= 10) break; }
以及f *= 1;
->f *= i;
its