C++;getline和if/else if语句未按预期工作 我最近开始学习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(); } } #包括 #包括 使用名称空间std; 结构果{ 苹果; 浮橙; 漂浮猕猴桃; 浮橘; 漂浮葡萄; 香蕉; }; int main() { 串苹果、桔子、猕猴桃、橘子、葡萄、香蕉; 果率; 水果*ptr; 苹果的百分比=26.2; 百分比:橙色=12.9; 猕猴桃的百分比=62.6; 橘子的百分比=18.3; 葡萄百分比=41.8; 百分比=13; ptr=&百分比; cout
您永远不会进行比较。您的if语句只会说C++;getline和if/else if语句未按预期工作 我最近开始学习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(); } } #包括 #包括 使用名称空间std; 结构果{ 苹果; 浮橙; 漂浮猕猴桃; 浮橘; 漂浮葡萄; 香蕉; }; int main() { 串苹果、桔子、猕猴桃、橘子、葡萄、香蕉; 果率; 水果*ptr; 苹果的百分比=26.2; 百分比:橙色=12.9; 猕猴桃的百分比=62.6; 橘子的百分比=18.3; 葡萄百分比=41.8; 百分比=13; ptr=&百分比; cout,c++,string,pointers,getline,if-statement,C++,String,Pointers,Getline,If Statement,您永远不会进行比较。您的if语句只会说if(getline(…)。getline()函数获取一个流和一个结果字符串,然后再次返回流。以您的第一行为例: if ( getline ( cin, apple ) ) { string in; getline(cin, in); getline(cin,apple)将从cin获取下一行(用户输入)然后将其复制到字符串apple。然后它将返回cin。由于cin现在是if语句中的返回值,if语句将检查它是否为真。显然,cin两者都不是,但系统将其解释为
if(getline(…)
。getline()
函数获取一个流和一个结果字符串,然后再次返回流。以您的第一行为例:
if ( getline ( cin, apple ) ) {
string in;
getline(cin, in);
getline(cin,apple)
将从cin
获取下一行(用户输入)然后将其复制到字符串apple
。然后它将返回cin
。由于cin
现在是if语句中的返回值,if语句将检查它是否为真。显然,cin
两者都不是,但系统将其解释为真,并始终执行第一条语句
现在,关于如何修复此问题,您需要在程序开始时获取一次输入,例如:
if ( getline ( cin, apple ) ) {
string in;
getline(cin, in);
然后比较if语句中的变量
if (in == "apple") {
// Do stuff for apples
} else if (in == "orange") {
// Do stuff for oranges
} // etc
这解决了问题。谢谢!