【发布时间】:2017-01-11 23:16:34
【问题描述】:
试图验证整数,但当输入错误的值类型时,出现第一个 printf 的无限循环。
int main(int argc, char *argv[]) {
int input;
do{
int starCount;
printf("Please enter a number:");
scanf("%d",input);
do{
scanf("%d",&input);
}while(isdigit(input));
for(starCount=0; starCount<input; starCount++){
printf("*");
}
printf("\n");
}while(input>0);
return 0;
}
【问题讨论】:
-
我建议阅读一些documentation for the function scanf,然后在心里模拟代码的执行,看看为什么它不起作用。
-
1) 为什么在循环前调用
scanf()? 2)您应该检查调用scanf()返回的值。 -
您有两个
scanf电话是可疑的。他们中的第一个没有通过地址传递它的变量调用未定义的行为。我会从这些开始。 -
@Andrei Pak:您为什么要尝试将
isdigit应用于您的input,您希望它做什么?请解释您在isdigit应用程序背后的想法。你是怎么想到这个主意的? -
isdigit 检查字符是否为数字,将其应用于由 scanf 填写的 int 是没有意义的 - scanf 在处理输入字符串时会调用 isdigit
标签: c validation integer infinite-loop