我想从用户那里得到输入,并且需要知道一个办法让程序识别输入的是或不是双/焦炭这就是我现在所拥有的......但是当你输入了不正确的输入类型
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的第一个字符.你究竟如何处理这取决于你的应用程序的逻辑.