【问题标题】:C++ getline and if/else if statements are not working as I intendedC++ getline 和 if/else if 语句没有按我的预期工作
【发布时间】:2013-06-28 00:50:47
【问题描述】:

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

【问题讨论】:

    标签: c++ string pointers getline if-statement


    【解决方案1】:

    你从不做比较。你的 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
    

    【讨论】:

    • 解决了这个问题。谢谢!
    猜你喜欢
    • 2020-11-28
    • 2020-07-26
    • 2020-03-11
    • 1970-01-01
    • 2022-11-20
    • 2017-06-18
    • 2016-12-12
    • 2011-11-29
    • 1970-01-01
    相关资源
    最近更新 更多