2010-11-14 104 views
2

我目前正在研究C++程序,我想檢查用戶輸入是否有效。目前我的代碼工作,如果用戶輸入正確的輸入,或者如果用戶輸入一個不正確的小號碼,我的程序會告訴用戶輸入無效。現在我的問題是,當用戶輸入多個字符/字母或一個有9個或更多數字的大數字時,我的程序進入一個無限循環,給它們提供錯誤信息。下面是我的代碼:檢查有效輸入

//for (;;) 
    while (flag== false) 
    { 
     cin >> Input; 
     if (Input <= choice.size()-1) 
     { 
      flag = true; 
    // break; 
     } 

     else 
     { 
      cerr << "Input <" << Input << "> is Invalid, Please Choose a Valid Option\n"; 
      userInput = 0; 
     } 
    } 

正如你看到的,我也試圖做的for循環的infinate,但它給了我同樣的結果。 在我的代碼中,我正在將一個矢量打印到屏幕上。基本上,用戶選擇矢量值來使用它。

我願意接受任何建議。謝謝

+0

可能重複http://stackoverflow.com/questions/3273993/how-do-i-validate-user -in-a-double-in-c) – casablanca 2010-11-14 18:28:40

回答

2

如果用戶鍵入的東西無法讀入Input(從代碼中不清楚Input是什麼類型),那麼該輸入將停滯在輸入流中,並且循環的每次迭代都將保持失敗在輸入之前閱讀,直到您清除流。

您需要清除流標誌並擺脫每次讀取失敗後在流中等待的錯誤輸入。嘗試是這樣的:

while(!(cin >> Input) || Input <= choice.size()-1) 
{ 
    cerr << "Input <" << Input << "> is Invalid, Please Choose a Valid Option\n"; 
    cin.clear(); // Clears the input stream fail flag 
    cin.ignore(100, '\n'); // Ignores any characters left in the stream 
} 
的[?我怎麼驗證用戶輸入在C++雙(
+0

'cin.sync()'是比指定一個硬編碼值(比如100)更好的選擇。 – casablanca 2010-11-14 19:01:17

+0

'sync'是否可移植? http://www.cplusplus.com/reference/iostream/istream/sync/不太清楚在'cin'上調用'sync'的保證是什麼,以及http://stackoverflow.com/questions上的評論/ 3273993 /我怎麼做 - 驗證 - 用戶輸入作爲一個雙 - 在C是不是太鼓舞人心。 – user168715 2010-11-14 20:45:14