所以我正在从我的课堂教材开始使用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;
}
答案 0 :(得分:5)
发生这种情况的原因是,在准备md1
时,您从最终用户处读到的最后一项是int
。整数输入的最终用户类型,然后按 Enter 。 C ++将整数读入movieRunTime
,但保留输入 缓冲的字符代码以供下次读取。
下一次,输入字符代码将返回GetTitle
,这意味着标题变为空字符串。这就是你正在观察的行为。
要解决此问题,请向构造函数添加对std::cin.ignore
的调用:
MovieData()
{
GetTitle();
GetDirector();
GetYear();
GetRunTime();
std::cin.ignore(256, '\n');
}