【发布时间】:2014-06-18 17:12:59
【问题描述】:
好的,所以我在几个地方搜索了这个问题的答案,我在 C++ 中找到了相同问题的答案,但它涉及清除 cin 和那些东西,我不知道如何将其翻译为C。如果这实际上是在其他地方回答的,我提前道歉,我只是错过了它。另外,请记住,我基本上是在自学C,除了您在这段代码中看到的内容之外,我知道的不多。
基本上,我的问题是这样的:我正在运行一个要求输入的循环,然后使用switch 语句来选择发生的情况。 switch 采用int,它适用于任何数字输入。但是,当您输入char 时,它只是无限循环,没有机会输入其他任何内容。
假设这与我查找的 C++ 示例中的问题相同 - 而且我不是 100% 确定它是 - 当我输入 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
【问题讨论】:
-
我建议你read more about
scanf,特别是检查它返回的内容。 -
我会调查的,谢谢。
-
@Floris 从技术上讲,
fflush(stdin)是未定义的行为。并非所有库都支持它。在换行之前获取字符可能会更好。 -
感谢大家的建议。
标签: c infinite-loop