C++测试输入是否为double/char

Wal*_*ter 0 c++ loops input

我想从用户那里得到输入,并且需要知道一个办法让程序识别输入的不是双/焦炭这就是我现在所拥有的......但是当你输入了不正确的输入类型

1)双重测试只是无限循环

2)即使使用正确的输入,char也不会停止循环

int main () {
    double _double = 0;
    bool done = true;
while ( done ) {
    cout << "Please enter a DOUBLE:\n" << endl;
    cin >> _double;
    if ( _double > 0 ) { done = false; }
    if ( _double < 0 ) { cout << "\nthe number you entered was less than zero\nplease enter a valad number..." << endl; } 
    if(cin.fail()) { cin.clear(); }
}

done = false;
char _char = ' ';
while ( !done ) {
    cout << "Please enter a CHAR" << "\n";
    cout << "\t'y' = yes\n\t'n' = no" << endl;
    cin >> _char;
    if ( _char == 'y' || _char == 'n' ) { done = true; }
    if ( ! (_char == 'y' || _char == 'n') ) { cout << "\nyou have entered an invald symbol... \n" << endl; }
    if(cin.fail()) { cin.clear(); }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

最好的选择是始终将输入读作字符串.然后,您可以使用类似std::strtod()测试和转换为双精度的函数.检查流是否已经失败然后重置它们最多容易出错,并且不会让您产生良好的错误消息.

例如:

string s;
cin >> s;
char * p;
double d = strtod( s.c_str(), & p );
if ( * p == 0 ) {
   cout << "Read double: " << d << endl;
}
else {
   cout << "Read string: " << s << endl;
}
Run Code Online (Sandbox Code Playgroud)

指针"p"将指向无法转换为double的第一个字符.你究竟如何处理这取决于你的应用程序的逻辑.