收到NaN输入后,C ++程序再次请求输入然后退出

时间:2015-02-07 00:14:45

标签: c++ xcode loops nan cin

我是一个初学的C ++程序员,这只是我的第二个程序......它是美元和欧元之间的简单货币转换器。我遇到的问题是,如果我输入NaN值,它会这样说并再次询问但退出。有谁知道如何让它等到用户输入别的东西?也是在第二个cin>> user_dollar我收到一条错误消息“无法解析对重载函数的引用;你的意思是打电话吗?“对不起,这太长了,谢谢〜

这是我的代码。我在MacBook Pro上使用Xcode。

#include <iostream>
using namespace std;


int main() {
    string choice;
    int user_dollar;
    int user_euro;

    cout << "Dollars to Euros (type ‘Dollars’) or Euros to dollars (type ‘Euros’)? ";
    cin >> choice;

    if (choice == "Dollars" || choice == "dollars") {

        cout << "Enter dollar amount: ";
        cin >> user_dollar;
            if (isdigit(user_dollar) != true){
                cout << "That’s not a number... " << endl;
                cout << "Enter dollar amount: " << endl;
                *cin >> user_dollar;*
                }
            else {
                cout << "That is " << user_dollar / 1.13 << " Euros." << endl;
                }

    }

    else if (choice == "Euros" || choice == "euros") {

        cout << "Enter Euro amount: ";
        cin >> user_euro;

        cout << "That is " << user_euro * 0.89 << " dollars." << endl;

    }
}

2 个答案:

答案 0 :(得分:0)

在第二次使用cin之前,您需要刷新cin缓冲区。像

这样的东西
cin.clear();
cin.ignore(INT_MAX,'\n');
cin >> user_dollar;

有关刷新缓冲区的更多详细信息,请查看此thread

答案 1 :(得分:0)

由于user_dollar变量的类型是int,因此它只能包含整数。如果有人在数字之外键入了某些内容(例如&#34; hi&#34;),则无法将其存储在user_dollar中。

当您致电cin >> user_dollar并且用户输入非号码时,它会失败并且不会更改user_dollar。由于此时没有其他任何东西设置user_dollar,它可能是任何东西 - 半随机垃圾。您目前正在使用isdigit()检查垃圾。并且isdigit()不用于检查使用cin直接读取的整数。

您可以通过调用fail()检查是否无法读取数字,使用clear()重置是否存在错误,并使用ignore()刷新缓冲区,如Igor所示。< / p>

正如philipxy所说,你可以使用while循环继续询问,直到成功读取一个数字。