我最近开始学习C ++。我写了这个程序,根据用户输入输出数字。在我要求用户确定输出的整数之前,我发现我可以使用getline从用户那里获取一个字符串。我的问题是,现在无论用户输入什么,程序总是在输出其他东西时输出26.2。如何只输入“apple”输出26.2,只输入“orange”输出12.9,只输入“kiwi”输出62.6等?
#include <iostream>
#include <string>
using namespace std;
struct fruit {
float apple;
float orange;
float kiwi;
float tangerine;
float grape;
int banana;
};
int main()
{
string apple, orange, kiwi, tangerine, grape, banana;
fruit percentage;
fruit *ptr;
percentage.apple = 26.2;
percentage.orange = 12.9;
percentage.kiwi = 62.6;
percentage.tangerine = 18.3;
percentage.grape = 41.8;
percentage.banana = 13;
ptr = &percentage;
cout<<"Information from the USA in 2004.\n1. apple 2. orange 3. kiwi 4. tangerine 5. grape 6. banana\n";
if ( getline ( cin, apple ) ) {
cout<< ptr->apple;
cin.get();
}
else if ( getline ( cin, orange ) ) {
cout<< ptr->orange;
cin.get();
}
else if ( getline ( cin, kiwi ) ) {
cout<< ptr->kiwi;
cin.get();
}
else if ( getline ( cin, tangerine ) ) {
cout<< ptr->tangerine;
cin.get();
}
else if ( getline ( cin, grape ) ) {
cout<< ptr->grape;
cin.get();
}
else if ( getline ( cin, banana ) ) {
cout<< ptr->banana;
cin.get();
}
else {
cout<<"Error, invalid input.";
cin.get();
}
}
答案 0 :(得分:2)
你永远不会进行比较。你的if语句只说if (getline(...))
。 getline()
函数接受流和结果字符串并再次返回流。我们以你的第一行为例:
if ( getline ( cin, apple ) ) {
getline(cin, apple)
将从cin
(用户输入)获取下一行,并将其复制到字符串apple
中。然后它将返回cin
。由于cin
现在是if语句中的返回值,因此if语句会检查它是true还是false。显然,cin
既不是,但系统将其解释为true并始终执行您的第一个语句。
现在,关于如何解决这个问题。您需要在程序开头获取一次输入,例如:
string in;
getline(cin, in);
然后在if语句中比较该变量。
if (in == "apple") {
// Do stuff for apples
} else if (in == "orange") {
// Do stuff for oranges
} // etc