当程序在C中期望int时传递字符串

当程序在C中期望int时传递字符串,c,loops,while-loop,scanf,stdin,C,Loops,While Loop,Scanf,Stdin,我有以下代码: #include <stdio.h> int main(){ int a; while(1) { scanf("%d", &a); if(a >= 1000000 || a <= 9999) { printf("Error"); } else { break;

我有以下代码:

#include <stdio.h>

int main(){

    int a;

    while(1)
    {
        scanf("%d", &a);
        if(a >= 1000000 || a <= 9999)
        {
            printf("Error");
        }
        else
        {
            break;
        }
    }

return 0;
}

一直循环,再也不问电话号码了,为什么会这样?代码不应该只打印一条错误消息,然后在scanf中再次等待输入吗?

是的,应该是这样的。然而,在这里,当匹配失败发生时(由于输入中存在
),输入仍保留在输入缓冲区中,并馈送到下一次调用
scanf()
,结果再次失败,从而进入无限循环


发生故障后,需要清除无效输入的输入缓冲区。为此,必须检查
scanf()
的返回值以确保扫描成功。

要检查输入是否无效,需要检查
scanf
的返回值。并清理输入缓冲区,这样它就不会被一次又一次地读取。。。或者使用更好的输入法,例如
fgets
。它被卡在小数点上,保留在输入缓冲区中,
ErrorErrorErrorErrorErrorErrorError...