2017-03-24 47 views
0

我有一些代碼要求用戶輸入字母數字字符,如果他們輸入了其他內容(例如@,#,$),它會再次要求輸入字母數字字符。 出於某種原因,我需要輸入一個非字母數字字符兩次才能接受它。這是代碼。爲什麼我需要輸入非char值兩次才能結束程序

#include <iostream> 
#include <cctype> 

using namespace std; 

void get_option(char& input, string msg) { 
    string clear_input; 
    bool isletter; 
    bool isnumber; 
    bool test = 0; 
    while (test == 0) { 
     cout << msg; 
     cin >> input; 
     isletter = isalpha(input); 
     isnumber = isdigit(input); 
     if (isletter == 0 && isnumber == 0) { 
      cin.clear(); 
      cin >> clear_input; 
      cout << input << endl << isnumber << endl << isletter << endl; 
      test = 0; 
     } 
     else if (isletter == 1 || isnumber == 1) { 
      test = 1; 
     } 

    } 
} 

int main() { 
    char input; 
    string msg = "Please enter an alphanumeric char: "; 
    get_option(input, msg); 
    return 0; 
} 
+0

因爲在用戶沒有輸入字母數字字符的情況下,你有'cin >> clear_input'行嗎?這將等待來自用戶的進一步輸入。 –

+0

不要將布爾值與'0'和'1'進行比較。寫下'if(!isletter &&!isnumber)...'和'if(isletter || isnumber)...'。 (並且不要給它們分配'0'和'1',使用'false'和'true'。) – molbdnilo

+0

感謝您的建議並回答我的問題。我仍然是C++的noob,我很感激所有我能得到的幫助。 – MattB

回答

1

這是因爲行cin >> clear_input;,我看到絕對沒有目的。刪除該行(以及關於該事件的聲明clear_input)。

+0

啊啊,謝謝你。它遺留在我使用的其他代碼的代碼中,我甚至沒有考慮過。乾杯 – MattB

相關問題