对象的第二个实例无法正常工作
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');
}
所以我正在处理我的 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');
}