如果是char或string,则返回false,但如果输入无法转换为整数,则返回true.C++做while循环

JOR*_*ANO 0 c++

语言: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)

Jon*_*rdy 5

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)

这具有强制用户输入基于行的优点 - 默认情况下它是基于令牌的.

  • 如果转换失败,您还需要在重试之前清除输入缓冲区(除了流状态),否则您将陷入无限循环. (2认同)