我有这段代码询问用户年龄,如果输入不是数字,它将返回并再次询问用户。但由于某种原因,它只是打印第一个printf语句不停止。我做错了什么?
do
{
printf("Please enter your age: ");
scanf("%d", &age);
if (age == 0)
{
printf("Please make sure to only enter an integer: ");
scanf("%d", &age);
}
} while (isdigit(age) == 0);
答案 0 :(得分:4)
isdigit()
将始终返回0
,除了一些特殊值,请尝试52
。
isdigit()
函数用于ascii值,如果ascii值对应于数字,则返回1
,否则返回0
,因此对于大多数输入的数字,结果为0
。
如果您需要在输入非数字字符时停止循环,则需要检查scanf()
返回值,以及它的用途。
如果您尝试再次询问用户某个值,则会出现问题,因为如果输入缓冲区中遗留了'\n'
个字符,scanf()
将忽略它,并继续读取,导致到无限循环,所以这应该适合你
printf("Please enter your age: ");
while ((scanf("%d", &age) != 1) || (age == 0))
{
int chr;
do {
chr = getchar();
} while ((chr != EOF) && (chr != '\n'));
printf("Please make sure to only enter an integer: ");
}