语言:C++(IDE:Visual Studios)当用户输入除整数之外的任何内容时,如何使do while循环返回true?我对如何做到这一点有点失落.
#include <iostream>//pre processor directive
#include <string>
#include <iomanip>
using namespace std;//standard library
int main( )
double money=0;
do{
cout << ("please enter your taxable income:\n") << fixed << setprecision(2) << endl;
cin >> (money);
}while(money < 0 || );
Run Code Online (Sandbox Code Playgroud)
istream定义转换bool,指示上次读取是否成功.您可以使用它来测试是否解析double成功:
if (cin >> money) {
// success
} else {
// failure
}
Run Code Online (Sandbox Code Playgroud)
如果流处于失败状态并且您想要重试读取 - 例如,提示用户输入新值 - 那么您可以使用clear()成员函数将状态恢复为正常状态:
cin.clear();
Run Code Online (Sandbox Code Playgroud)
但是,这不会清除输入缓冲区,因此您最终会再次读取相同的数据.您可以清除输入缓冲区,直到下一个换行符:
cin.ignore(numeric_limits<streamsize>::max(), '\n');
Run Code Online (Sandbox Code Playgroud)
或者您可以通过行读取,并使用a stringstream来读取单个值:
string line;
getline(cin, line);
istringstream stream(line);
if (stream >> money) {
// success
} else {
// failure
}
Run Code Online (Sandbox Code Playgroud)
这具有强制用户输入基于行的优点 - 默认情况下它是基于令牌的.