gpt4 book ai didi

C++ getline 和 if/else if 语句没有按我的预期工作

转载 作者:行者123 更新时间:2023-11-28 03:14:31 25 4
gpt4 key购买 nike

我最近开始学习 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();
}
}

最佳答案

你永远不会做比较。您的 if 语句只说 if (getline(...))getline() 函数接受一个流和一个结果字符串并再次返回该流。让我们以您的第一行为例:

if ( getline ( cin, apple ) ) {

getline(cin, apple) 将从 cin(用户输入)中获取下一行并将其复制到字符串 apple 中。然后它将返回 cin。由于 cin 现在是 if 语句中的返回值,因此 if 语句会检查它是真还是假。显然,cin 两者都不是,但系统将其解释为 true 并始终执行您的第一条语句。

现在,至于如何解决这个问题。您需要在程序开始时获取一次输入,例如:

string in;
getline(cin, in);

然后在您的 if 语句中比较该变量。

if (in == "apple") {
// Do stuff for apples
} else if (in == "orange") {
// Do stuff for oranges
} // etc

关于C++ getline 和 if/else if 语句没有按我的预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17355556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com