#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。有人可以解释一下,我做错了什么?
答案 0 :(得分: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;
}
编辑:我没有仔细检查我的初始帖子。由于您已在scanf中使用%d
,因此根本不需要检查isdigit,我将其从while条件中完全删除。作为无限循环问题的快速解决方案,我添加了clean_stdin()
函数,该函数在@Gangadhar在他的评论中提到的帖子How to scanf only integer and repeat reading if the user enter non numeric characters?的接受答案中提及,我推荐阅读(我也应该这样做)在发布之前做过)