当程序期望 C 中的 int 时传递字符串
Passing string when program expect int in C
我有以下代码:
#include <stdio.h>
int main(){
int a;
while(1)
{
scanf("%d", &a);
if(a >= 1000000 || a <= 9999)
{
printf("Error");
}
else
{
break;
}
}
return 0;
}
我希望用户输入类似 20201 的内容,如果输入无效,它将重新开始,但我注意到当我输入 2020.1 时,程序 returns:
ErrorErrorErrorErrorErrorErrorError...
一直循环下去,再也不问这个号码,为什么会这样?代码不是应该只打印一条错误消息并在 scanf 中等待再次输入吗?
是的,这是应该的。然而,在这里,当匹配失败发生时(由于输入中存在 .
),输入保留在输入缓冲区中,并被提供给下一次调用 scanf()
,只会再次失败,从而进入无限循环。
发生故障后,您需要清除无效输入的输入缓冲区。为此,您必须检查 scanf()
的 return 值以确保扫描成功。
我有以下代码:
#include <stdio.h>
int main(){
int a;
while(1)
{
scanf("%d", &a);
if(a >= 1000000 || a <= 9999)
{
printf("Error");
}
else
{
break;
}
}
return 0;
}
我希望用户输入类似 20201 的内容,如果输入无效,它将重新开始,但我注意到当我输入 2020.1 时,程序 returns:
ErrorErrorErrorErrorErrorErrorError...
一直循环下去,再也不问这个号码,为什么会这样?代码不是应该只打印一条错误消息并在 scanf 中等待再次输入吗?
是的,这是应该的。然而,在这里,当匹配失败发生时(由于输入中存在 .
),输入保留在输入缓冲区中,并被提供给下一次调用 scanf()
,只会再次失败,从而进入无限循环。
发生故障后,您需要清除无效输入的输入缓冲区。为此,您必须检查 scanf()
的 return 值以确保扫描成功。