作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void){
int corX = 0;
do{
printf("Please enter number X:\n");
scanf("%d",&corX);
} while(!(isdigit(corX) && corX>1 && corX<80));
printf("You entered X as: %d\n",corX);
return 0;
}
嗨!上面的代码应该检查输入的值是否是整数并符合范围。如果没有,程序应该再次询问。不幸的是,它不能以这种方式工作。无论我写什么,循环总是会经过,结果我收到输入的数字数字和其他符号的 0。有人可以解释一下我做错了什么吗?
最佳答案
你的 while 条件似乎有问题。我重写了它,得到了我认为是你想要的行为(当输入小于 1 或大于 80 时要求输入)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int clean_stdin()
{
while (getchar()!='\n');
return 1;
}
int main(void){
int corX = 0;
do{
printf("Please enter number X:\n");
scanf("%d",&corX);
} while( ( corX<1 || corX>80 ) && clean_stdin() );
printf("You entered X as: %d\n",corX);
return 0;
}
编辑:我没有足够仔细地检查我的初始帖子。根本不需要检查 isdigit,因为您已经在 scanf 中使用了 %d
,我将其从 while 条件中完全删除了。作为无限循环问题的快速修复,我添加了本文接受的答案中提到的 clean_stdin()
函数 How to scanf only integer and repeat reading if the user enter non numeric characters? @Gangadhar 在他的评论中提到,我建议阅读(我也应该在发布之前完成)
关于c - C 中的 while 循环无论条件如何都会执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19890868/
我是一名优秀的程序员,十分优秀!