而不管C中的条件如何,循环都会通过 #包括 #包括 #包括 内部主(空){ int-corX=0; 做{ printf(“请输入数字X:\n”); scanf(“%d”和&corX); }while(!(isdigit(corX)&&corX>1&&corX
您的while状态似乎有问题。我重写了它,我得到了我认为您想要的行为(输入小于1或大于80时请求输入)而不管C中的条件如何,循环都会通过 #包括 #包括 #包括 内部主(空){ int-corX=0; 做{ printf(“请输入数字X:\n”); scanf(“%d”和&corX); }while(!(isdigit(corX)&&corX>1&&corX,c,loops,while-loop,C,Loops,While Loop,您的while状态似乎有问题。我重写了它,我得到了我认为您想要的行为(输入小于1或大于80时请求输入) #包括 #包括 #包括 int clean_stdin() { 而(getchar()!='\n'); 返回1; } 内部主(空){ int-corX=0; 做{ printf(“请输入数字X:\n”); scanf(“%d”和&corX); }而((corX80)和&clean_stdin()); printf(“您输入的X为:%d\n”,corX); 返回0; } 编辑:我没有仔细检查我
#包括
#包括
#包括
int clean_stdin()
{
而(getchar()!='\n');
返回1;
}
内部主(空){
int-corX=0;
做{
printf(“请输入数字X:\n”);
scanf(“%d”和&corX);
}而((corX80)和&clean_stdin());
printf(“您输入的X为:%d\n”,corX);
返回0;
}
编辑:我没有仔细检查我的初始帖子。根本不需要检查isdigit,因为您已经在scanf中使用了
%d
,我将它完全从while条件中删除。作为无限循环问题的快速修复,我添加了clean\u stdin()
这篇文章的公认答案中提到的功能,@Gangadhar在他的评论中提到了这一功能,我建议阅读它(这也是我在发布之前应该做的)你认为isdigit有什么作用?也许你应该试着输入48?我想象isdigit检查输入的符号是否是一个数字。请看,让我们重新表述Kerrek的问题:非常感谢,它几乎可以工作-但为什么在写非数字的符号的情况下,程序会陷入无限循环,一遍又一遍地询问请输入数字X:“?此解决方案无效。isdigit(corX)
检查corX是否在ASCII范围“0”-“9”内,该范围不同于corX
以%d
格式输入数字时获得的corX(0-9整数)值。这意味着isdigit(corX)
始终返回0,即!isdigit(corX)
在输入任何数字时总是返回非零。scanf
应该读作scanf(“%c”,&corX)
@igorpov我试图修改我的答案,希望能有所改进。我同意你的观点,我的答案没有涵盖所有内容(可能仍然没有涵盖)
#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;
}
#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;
}