对象的第二个实例不能正常工作

Second Instance Of Object Not Working Correctly

本文关键字:工作 常工作 第二个 实例 不能 对象      更新时间:2023-10-16

所以我正在做一个例子从我的课堂教科书开始与c++:早期对象,我遇到了一个问题。我被指示创建一个程序,读取一些数据并在最后打印它,总共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 Titlen";
        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时从最终用户读取的最后一项是int。最终用户输入该整数,然后按输入。c++将该整数读入movieRunTime,但保留的字符代码,将缓冲区用于下次读取。

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

要解决这个问题,在构造函数中添加一个std::cin.ignore调用:
MovieData()
{
    GetTitle();
    GetDirector();
    GetYear();
    GetRunTime();
    std::cin.ignore(256, 'n');
}