我有以下代码:
#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 应该会阻塞,但这不是因为在第一次调用后输入缓冲区不为空!这就是为什么它总是返回以前的值并无限循环的原因。
请改用 fgets
和 sscanf
的组合。
关于c - scanf 读取上一行而不是获取新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20095809/