2014-10-20 38 views
-3

我只是有一個循環,如果已經進入了一個無效的選項,返回到開始經常性錯誤

do{      
     printf("Please enter a option, Press 'q' to quit\n"); 
     scanf("%d",&option); 

     if(option == 1){ 
      option1(...); 
      break; 
     }else if(option == 2){ 
      option1(...); 
      break; 
     }else if(option == 3){ 
      option1(...); 
      break; 
     }else if(option == false){ 
      printf("exit\n"); 
      exit(EXIT_SUCCESS); 
     }else{ 
      continue; 
     } 
    } while(true); 

我的問題是

如果我運行它並輸入一個輸入例如:' 5'返回到do語句的開頭,我必須輸入另一個輸入。

如果我輸入'q'退出循環會變得瘋狂並不斷重複。

+5

'q'是不是int。 – user1336087 2014-10-20 09:59:17

+0

[使用scanf接受用戶輸入]的可能重複(http://stackoverflow.com/questions/2144459/using-scanf-to-accept-user-input) – dandan78 2014-10-20 10:00:28

+0

「option」是什麼類型?你爲什麼把它比作「假」? – 2014-10-20 10:01:27

回答

-1

'q'不與scanf("%d"...一起閱讀。 option因此可能沒有切換的值,所以執行重複循環的默認情況。這就是你看到的。 補救措施:

  1. 任何非數字輸入手段打破:只要留下的一切,但被改變continuebreak和退出循環。

  2. 捕獲非數值輸入並處理它。 scanf函數的使用手冊(http://linux.die.net/man/3/scanf)說:

    這些函數返回

    您可以檢查scanf函數的返回值,如果爲0,嘗試SCANF匹配成功 和分配的輸入項目數在另一個聲明中的信;如果'q',休息。

  3. 立即讀取一個字符(看起來最乾淨)並切換char,而不是由它表示的int值。

3

如果你想退出使用q程序,你應該聲明變量option爲char。


例如:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    char option; 
    do 
    {      
     printf("Please enter a option, Press 'q' to quit\n"); 
     scanf(" %c",&option); 

     if(option == '1') 
     { 
      //option1(...); 
      printf("%c",option); 
      break; 
     } 
     else if(option == '2') 
     { 
      //option1(...); 
      printf("%c",option); 
      break; 
     } 
     else if(option == '3') 
     { 
      //option1(...); 
      printf("%c",option); 
      break; 
     } 
     else if(option == 'q') 
     { 
      printf("exit\n"); 
      exit(EXIT_SUCCESS); 
     } 
     else 
     { 
      continue; 
     } 
    } while(1); 
    return 0; 
}