C语言中导致无限循环的字符项

C语言中导致无限循环的字符项,c,infinite-loop,C,Infinite Loop,好的,我已经在几个地方搜索了这个问题的答案,我在C++中找到了相同问题的答案,但是它涉及到清除cin和那些东西,我不知道如何将其翻译成C。事实上,如果这是其他地方的回答,而我只是错过了,我提前道歉。另外,请记住,我基本上是在自学C,除了在这段代码中看到的内容之外,我知道的不多 基本上,我的问题是:我正在运行一个循环,该循环要求输入,然后使用switch语句来选择发生了什么。开关接受一个int,它可以与任何数字输入一起正常工作。然而,当您输入一个字符时,它只是无限循环,没有机会输入任何其他内容 假

好的,我已经在几个地方搜索了这个问题的答案,我在
C++
中找到了相同问题的答案,但是它涉及到清除
cin
和那些东西,我不知道如何将其翻译成
C
。事实上,如果这是其他地方的回答,而我只是错过了,我提前道歉。另外,请记住,我基本上是在自学
C
,除了在这段代码中看到的内容之外,我知道的不多

基本上,我的问题是:我正在运行一个循环,该循环要求输入,然后使用
switch
语句来选择发生了什么。
开关
接受一个
int
,它可以与任何数字输入一起正常工作。然而,当您输入一个
字符时,它只是无限循环,没有机会输入任何其他内容

假设这与我查找的
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

fflush(stdin)
具有未定义的行为。如果要丢弃在scanf()调用后输入的字符,可以读取并丢弃它们。

您可以使用
getchar()
清除字符。

我建议您,尤其是检查它返回的内容。我会调查一下,谢谢。@Floris从技术上讲,
fflush(stdin)
是未定义的行为。并非所有库都支持它。也许在换行前获得角色会更好。谢谢大家的建议。你是对的;我太快了,应该测试一下我的建议。为了完整性,我建议您编辑您的答案,以显示如何使用
getchar()
——例如使用
while(scanf(“%d”,&select)!=1)getchar()
。我所做的是在
switch
语句后的循环中插入
getchar()
。或者,阅读直到得到
\n
EOF
,在许多情况下,如果当前行有垃圾,丢弃行的其余部分更有意义。