VS中scanf_s失效原因?

int main()
{
    int input = 0;
    do
    {
        printf("请输入:>");
        scanf_s("%d", &input);
        fflush(stdin);
        if (input == 1)
        {
            printf("haha");
        }
    } while (input != 1);
    return 0;
}

在VS中当输入的不是数字时进入死循环后面的scanf_s不再生效(缓冲区已经清空)
进入死循环的图片

阅读 1.6k
1 个回答

当你用 scanf_s("%d", &input); 来读入一个数字类型的内容的时候,如果输入的内容不是数字,这个内容并不会被读取,而是仍在输入流中等待被读取,你下次循环就又拿到了这个内容,还是不会被读取,就陷入了死循环。
建议把代码改为:

int main()
{
    int input = 0;
    char buffer[256];
    do
    {
        printf("请输入:>");
        scanf("%s", buffer);
        input = atoi(buffer);
        fflush(stdin);
        if (input == 1)
        {
            printf("haha");
        }
    } while (input != 1);
    return 0;
}

就没这个问题了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进