【问题标题】:How can I find the error in my getline function?如何在我的 getline 函数中找到错误?
【发布时间】:2022-06-20 15:51:25
【问题描述】:

我是 C++ 中的 getline 函数的新手。

我正在编写一个简单的程序,它为分数创建一个结构,该结构读取分子和分母。然后,我正在编写一个void printFraction() 函数,它将结构体作为参数并输出分子除以分母。

但是,我收到一条错误消息,提示 getline 没有匹配的函数,并且它需要参数但只得到 2 个。我怎样才能找到问题所在?

#include <iostream>
using namespace std;

struct Fraction {
    int numerator;
    int denominator;
};

void printFraction(Fraction f);
int main() {
    Fraction f;
    cout << "Please enter numerator";
    getline(cin, f.numerator);
    cout << "Please enter denominator";
    getline(cin, f.denominator);
    cin.ignore();
    printFraction(f);
}

void printFraction(Fraction f) {
    cout << f.numerator << "/" << f.denominator;
}

【问题讨论】:

  • getline 用于获取整个输入行作为字符串,而不是 int。如果您想要格式化输入,请使用cin &gt;&gt;,例如cin &gt;&gt; f.numerator;

标签: c++


【解决方案1】:

首先,您必须包含string

#include <string>

另外,getline 不适用于 int。所以你必须接受std::string,然后将string转换成int

考虑不要在您的代码中使用以下内容:

using namespace std;

..因为它被认为是不好的做法。有关原因的更多信息,请查看why is "using namespace std" considered as a bad practice

所以在所有这些修复之后,这是最终代码:

最终代码:

#include <iostream>
#include <string>

struct Fraction {

    int numerator;
    int denominator;
};

void printFraction(Fraction f);

int main() {

    Fraction f;
    std::string numerator, denominator;

    std::cout << "Please enter numerator: ";
    std::getline(std::cin, numerator);

    std::cout << "Please enter denominator: ";
    std::getline(std::cin, denominator);

    f.numerator = std::stoi(numerator);
    f.denominator = std::stoi(denominator);

    printFraction(f);
}

void printFraction(Fraction f) {

    std::cout << f.numerator << '/' << f.denominator;
}

【讨论】:

    【解决方案2】:

    因此,您不能在整数 int 上使用 getline,它会将整行读取为字符串。因此,您可以使用 std::cin 输入或通过执行以下操作将您的行转换为整数

    #include <iostream>
    #include <string>
    
    using namespace std;    
     
    struct Fraction {    
            int numerator;
            int denominator;
    };    
    
    void printFraction(Fraction f);    
    
    int main() {    
            Fraction f;
            string line;
    
            cout << "Please enter numerator";
            getline(cin, line);
            f.numerator = stoi(line); // stoi() converts a string to an integer
    
            cout << "Please enter denominator";
            getline(cin, line);
            f.denominator = stoi(line);
            cin.ignore();
    
            printFraction(f);
     
    }    
     
    void printFraction(Fraction f) {    
            cout << f.numerator << "/" << f.denominator;
    }    
    
    

    【讨论】:

    • #include&lt;string&gt;
    • using namespace std 不是一个好习惯。你也应该提到这一点。
    【解决方案3】:

    问题

    首先包含字符串库

    #include <string>
    

    其次,getline 用于读取字符串格式的输入,因此会出现错误,第三个不使用using namespace std;,这被认为是一种不好的编程习惯。

    解决方案

    在以字符串格式获取用户输入后,使用stoi 将变量转换为整数,以便您执行算术运算

    我在下面修改了你的代码

    #include <iostream>
    #include <string>
    
       
    struct Fraction {
        int numerator;
        int denominator;
    };
    
    void printFraction(Fraction f);
    
    
    int main() {
        Fraction f;
        std::string numerator, denominator;
    
        std::cout << "Please enter numerator";
        std::getline(cin, numerator);
    
        std::cout << "Please enter denominator";
        std::getline(cin, denominator);
    
        f.numerator = std::stoi(numerator);
        f.denominator = std::stoi(denominator);
    
        printFraction(f);
    }
    
    void printFraction(Fraction f) {
        std::cout << f.numerator << "/" << f.denominator;
    }
    

    参考文献

    stoi() C++

    getline() C++

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 2022-01-02
      • 2020-03-15
      相关资源
      最近更新 更多