对象的第二个实例无法正常工作

Second Instance Of Object Not Working Correctly

所以我正在处理我的 class 教科书 Starting Out With C++: Early Objects 中的一个示例,我 运行问题。我被指示创建一个程序来读取一些数据并在最后打印它,总共 2 个实例。当第二个实例 (md2) 运行时,它不允许我在第一个字段中输入任何内容。这真的很烦我,我想不通。提前致谢!

#include <iostream>

using namespace std;

class MovieData
{
private:
    string movieTitle;
    string movieDirector;
    int movieYear;
    int movieRunTime;
public:
    MovieData()
    {
        GetTitle();
        GetDirector();
        GetYear();
        GetRunTime();
    }

    void GetTitle()
    {
        cout << "Specify A Title\n";
        getline(cin, movieTitle);
        cout << endl;
    }
    void GetDirector()
    {
        cout << "Specify A Director" << endl;
        getline(cin, movieDirector);
        cout << endl;
    }
    void GetYear()
    {
        cout << "Specify A Year" << endl;
        cin >> movieYear;
        cout << endl;
    }
    void GetRunTime()
    {
        cout << "Specify A Duration In Minutes" << endl;
        cin >> movieRunTime;
        cout << endl;
    }

    void SetTitle()
    {
        cout << "R" << movieTitle << endl;
    }
    void SetDirector()
    {
        cout << "R" << movieDirector << endl;
    }
    void SetYear()
    {
        cout << "R" << movieYear << endl;
    }
    void SetRunTime()
    {
        cout << "R" << movieRunTime << endl;
    }


};

void PrintData(MovieData md);

int main() {
    MovieData md1;
    PrintData(md1);
    MovieData md2;
    PrintData(md2);
}


void PrintData(MovieData md)
{
    md.SetTitle();
    md.SetDirector();
    md.SetYear();
    md.SetRunTime();
    cout << endl;
}

发生这种情况的原因是您在准备 md1 时从 end-user 读取的最后一项是 int。 End-user 输入整数,然后按 Enter。 C++ 将整数读入 movieRunTime,但将 Enter buffered 的字符代码留给下一次读取。

下一次,输入的字符代码返回到 GetTitle,这意味着标题变为空字符串。这就是您观察到的行为。

要解决此问题,请将对 std::cin.ignore 的调用添加到您的构造函数中:

MovieData()
{
    GetTitle();
    GetDirector();
    GetYear();
    GetRunTime();
    std::cin.ignore(256, '\n');
}