我有以下代码:
#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
INPUT:
2
38762
10
UNWANTED OUTPUT:
201222
我不确定计算机扫描用于打印最后一个不需要的输出的第二个数字。
答案 0 :(得分:1)
你的第二个scanf应该被阻止,但这不是因为第一次调用后输入缓冲区不是空的!这就是为什么它总是返回前一个值并无限循环。
请改为使用fgets
和sscanf
的组合。
答案 1 :(得分:1)
如果您的功能在其中使用scanf()
来询问字符,或者您正在使用fgets()
来读取一行,则可能会发现scanf()
/ fgets()
确实在运行没有用户输入。这是因为您在scanf("%d",&opt);
处输入的换行符仍然存在,并用作下一个scanf()/fgets()
的新输入。您必须通过发出
fflush (stdin);
在致电scanf()
或fgets()
答案 2 :(得分:1)
你可能需要这样的东西..
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int opt;
do{
printf("Enter the option\n");
scanf("%d",&opt);
switch(opt){
case 1: func1();
break;
case 2: func2();
break;
case 3:
return 0;
}
}while(opt != 3);
return 0;
}
答案 3 :(得分:0)
hhachem在评论中指出您未从while
循环中退出的一个问题。
您可以通过执行来解决此问题(因为您只想在按3后退出):
while(1)
{
switch(1)
{
case 1:func1();
break;
case 2:func2();
break;
case 3: exit(0);
}
printf("\n");
scanf("%d",&opt);
}
测试程序:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int opt;
scanf("%d",&opt);
while(1)
{
switch(opt)
{
case 1:printf("1");
break;
case 2:printf("2");
break;
case 3:exit(0);
}
printf("\n");
scanf("%d",&opt);
}
return 0;
}
请参阅output。