我是一个初学的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;
}
}
答案 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
循环继续询问,直到成功读取一个数字。