当程序期望 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 值以确保扫描成功。