好的,所以我搜索了几个地方以获得答案,我在C++
找到了相同问题的答案,但它涉及清除cin
和那些东西,我我不知道如何将其翻译为C
。事实上,如果事实上已经在其他地方回答,我会提前道歉,我只是错过了它。另外,请记住,我基本上是在教自己C
,除了您在此代码中看到的内容之外,我不太了解。
基本上,我的问题是这样的:我正在运行一个循环,要求输入,然后使用switch
语句来选择会发生什么。 switch
需要int
,它适用于任何数字输入。但是,当您输入char
时,它只是无限循环,没有机会输入任何其他内容。
假设这与我在C++
示例中遇到的问题相同 - 我不是百分之百确定它是 - 当我输入char
时它会被添加到缓冲区,永远不会被清除,所以每次循环无效输入再次使用。在C++
中清除缓冲区似乎很简单,但我无法在C
中找到任何我能理解的内容。
这是我的代码,供参考:
int main()
{
while(1)
{
printf("(1-10) -> Run a program | (-1) -> Display menu | (0) -> Quit : ");
int quit = 0;
int select;
scanf("%d", &select);
switch(select)
{
case 1:
printf("%s", pgmRun);
helloWorld();
printf("%s", pgmEnd);
break;
//More cases here
case 0:
quit = 1;
break;
default:
printf("\n");
printf("Error: Invalid input\n");
printf("\n");
}
if(quit == 1)
break;
}
return 0;
}
提前感谢您的帮助,对于这么长的帖子感到抱歉。我倾向于啰嗦。 :P
答案 0 :(得分:4)
fflush(stdin)
有未定义的行为。如果要丢弃在scanf()调用后输入的字符,可以阅读并丢弃它们
您可以使用getchar()
清除角色。