2012-10-11 44 views
1

enter image description here我需要限制用户在输入字符时输入一个整数和字符串。我有一个整数的方法,我只需要适应它的字符。谁能帮我这个。Validator for one char for user input

char getChar() 
    { 
     char myChar; 
     std::cout << "Enter a single char: "; 
     while (!(std::cin >> myChar)) 
     { 
      // reset the status of the stream 
      std::cin.clear(); 
      // ignore remaining characters in the stream 
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
      // ^^^ This line needs to be changed. 
      std::cout << 

      "Enter an *CHAR*: "; 
    } 
    std::cout << "You entered: " << myChar << std::endl; 
    return myChar; 
} 

char getChar() 
{ 
    char myChar; 
    std::cout << "Enter an Char: "; 
    while (!(cin >> myChar)) 
    { 
     // reset the status of the stream 
     cin.clear(); 
     // ignore remaining characters in the stream 
     cin.ignore(std::numeric_limits<char>::max() << '\n'); 
     cout << "Enter an *CHAR*: "; 
    } 
    std::cout << "You entered: " << myChar << std::endl; 
    return myChar; 
} 

我试过这个,没有错误。但它并没有发生。

+0

我想不出一种'cin >> myChar'可能因非法转换而失败的方式(例如''0'是一个合法的'char')。读取后您需要检查'myChar'的值。 – hmjd

回答

0

我改变了methid这样:

char getChar(string q) 
{ 
char input; 
do 
{ 
cout << q.c_str() << endl; 
cin >> input; 
} 
while(!isalpha(input)); 
return input; 
} 

在我主我有:

字符串输入= “?你的性别M/F”; char sex = getChar(input); cout < <性别< <“\ n”;

Doin this,我不允许输入一个数字问问什么是性别。

3

我猜你的“不工作”,你的意思是,即使你输入一个更长的字符串或数字,它仍然被接受。这是因为通过<<运算符输入的所有字母和数字仍然是单个字符。

你必须添加其他检查,如果你不希望非字母字符:

while (!(std::cin >> myChar) || !std::isalpha(mychar)) 

std::isalpha的说明,请参见this reference

+0

你的猜测是正确的,在方法中我会把额外的支票? – Pendo826

+0

@ Pendo826将'while'循环更改为答案中的那个循环。 –

+0

哦,我明白了。我现在只是测试这个代码:)。 – Pendo826