0

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

2 回答 2

5

istream定义一个转换,以bool指示最后一次读取是否成功。您可以使用它来测试解析是否double成功:

if (cin >> money) {
    // success
} else {
    // failure
}

如果流处于失败状态并且您想重试读取(例如,提示用户输入新值),则可以使用clear()成员函数将状态恢复为正常:

cin.clear();

但是,这不会清除输入缓冲区,因此您最终会再次读取相同的数据。您可以清除输入缓冲区,直到下一个换行符:

cin.ignore(numeric_limits<streamsize>::max(), '\n');

或者您可以改为按行读取,并使用 astringstream读取单个值:

string line;
getline(cin, line);
istringstream stream(line);
if (stream >> money) {
    // success
} else {
    // failure
}

这样做的好处是强制用户输入是基于行的——默认情况下它是基于令牌的。

于 2013-05-08T01:34:20.360 回答
0

我最终只是做了一个 try/catch 语句,这基本上涉及我向混合中添加一个新变量,即字符串“str”:

    double money = 0; //initialized
    string str= ""; //initialized

    do{

        cout << "Please input an integer value" << endl;
        cin >> (str);

        try{
            money = stod(str);   //string to double
        }catch(...){  //inside the parenthesis, the "..." means to catch all exceptions.
            money = -1;    
            cin.clear();   
        }

    }while( money < 0);

这将捕获任何不转换为双精度的东西,使货币的价值等于 -1。否则,它将继续执行该程序。

于 2013-05-13T06:24:29.233 回答