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

时间:2015-09-04 00:23:13

标签: c++ instance

所以我正在从我的课堂教材开始使用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 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;
}

1 个答案:

答案 0 :(得分:5)

发生这种情况的原因是,在准备md1时,您从最终用户处读到的最后一项是int。整数输入的最终用户类型,然后按 Enter 。 C ++将整数读入movieRunTime,但保留输入 缓冲的字符代码以供下次读取。

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

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

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