c - scanf 读取上一行而不是获取新行

标签 c scanf

我有以下代码:

#include <stdio.h>
int opt;
scanf("%d",&opt);
while(opt!=0)
{
    switch(opt)
    {
    case 1:func1();
        break;
    case 2:func2();
        break;
    case 3:return 0;
    }
    printf("\n");
    scanf("%d",&opt);
}

我想让计算机每次都从用户那里获取不同的数字(1 或 2 或 3),并且每次计算机都会运行单独的功能。但是当我按 2 时,func2 得到 3 个整数并在屏幕上换行打印字符。计算机读取它们而不是读取下一个输入(1 或 2 或 3)。我该如何解决?

编辑:只有在特定输入后问题才会出现(我构建了一个转换碱基的程序)。

输入:

2

10

26

1z2

输出:

ERROR

输入:

2

38762

10

不需要的输出:

201222

我不确定计算机从哪里扫描它用来打印最后不需要的输出的第二个数字。

最佳答案

您的第二个 scanf 应该会阻塞,但这不是因为在第一次调用后输入缓冲区不为空!这就是为什么它总是返回以前的值并无限循环的原因。 请改用 fgetssscanf 的组合。

同时检查这个:http://c-faq.com/stdio/scanfprobs.html

关于c - scanf 读取上一行而不是获取新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20095809/

相关文章:

c - 如何声明一个不会产生警告的结构?

比较从标准输入读取的字符?

c++ - 当 b 大于 a 中的位数时右移 (a >> b) 的未定义行为?

c - 如何正确重用套接字来发送UDP数据包?

c - 为什么 scanf() 总是什么都不返回?

c - 如何在 Qt Creator 中为 Clang 静态分析器设置语言标准 (-std)

c - scanf 函数不起作用

C sscanf ("%hhx") 读取 unsigned int 而不是 unsigned char

c - 从 C 文件中读取特定行

我可以在 C 中同时扫描和打印整数吗?