int main(void) {
int x;
do {
printf("Height: ");
} while(!((scanf("%d", &x)) == 0) && !(x > 0 && x < 23));
}
我想简单地提示用户输入 0 到 23 之间的数字,如果输入无效(不是整数或超出范围),我想再次提示,直到他们做得正确为止。但是,第一次输入无效整数时,我会在无限循环中一遍又一遍地打印“高度”。我如何提示他们直到输入有效?
当我输入超出范围的数字时它起作用,但当我输入像“abc”这样的字符串时它不起作用
最佳答案
当且仅当用户输入了可以转换为 int
的内容时,
scanf
才会返回 1。
如果 scanf
不返回 1,那么您的工作就是清除流,以便可以读入另一个值。您可以使用惯用的方式来执行此操作
{
int c;
while ((c = getchar()) != '\n' && c != EOF);
}
正是您没有做的第二件事似乎导致您的代码无休止地打印。
还有更简洁的方法,但这是一个起点:
int main(void) {
int x;
do {
printf("Height: ");
if (scanf("%d", &x) != 1){
// invalid input, clear the stream and go round again.
int c;
while ((c = getchar()) != '\n' && c != EOF);
continue;
}
} while (x < 0 || x > 23);
return x;
}
(有些人不喜欢以我的方式编写的空 while
循环。如果不符合您的口味,请进行相应调整:有些公司禁止它。)
关于C - 当输入不是 int 时提示用户输入有效 int 会导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50850281/