簡體   English   中英

字符輸入導致C中的無限循環

[英]Character entry causing infinite loop in C

好的,所以我搜索了幾個地方以獲得答案,我在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

fflush(stdin)有未定義的行為。 如果要丟棄在scanf()調用后輸入的字符,可以閱讀並丟棄它們。
您可以使用getchar()來清除角色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM