2017-03-24 49 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

相关问题