字符输入导致C中的无限循环

时间:2014-05-02 04:56:30

标签: c infinite-loop

好的,所以我搜索了几个地方以获得答案,我在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

1 个答案:

答案 0 :(得分:4)

fflush(stdin)有未定义的行为。如果要丢弃在scanf()调用后输入的字符,可以阅读并丢弃它们 您可以使用getchar()清除角色。

相关问题