到目前为止是我的代码。 C ++ My code.这是学校要求提出的问题:编写一个程序,该程序使用名为MovieData的结构来存储有关电影的以下信息:•标题
•导演
•发布年份
•运行时间(以分钟为单位)
程序应创建两个MovieData变量,将值存储在其成员中,并传递每个变量,依次是一个以清晰格式显示有关电影信息的功能。
我的问题是,当用户输入第二部电影的信息时,getline(cin,b.title)被跳过,仅移至导演。我正在寻找这种情况的原因以及解决方法。Required output vs. My output.
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
struct MovieData {
string title;
string director;
int year;
int runningTime;
};
void displayMovie(MovieData movie);
int main()
{
MovieData a, b;
cout << "First Movie" << endl;
cout << "Enter title: ";
getline (cin, a.title);
cout << "Enter Director: ";
getline (cin,a.director);
cout << "Enter year: ";
cin >> a.year;
cout << "Enter Runing Time: ";
cin >> a.runningTime;
cout << "\nSecond Movie" << endl;
cout << "Enter title: ";
getline (cin, b.title);
cout << "Enter Director: ";
getline (cin, b.director);
cout << "Enter year: ";
cin >> b.year;
cout << "Enter Runing Time: ";
cin >> b.runningTime;
displayMovie(a);
displayMovie(b);
}
void displayMovie(MovieData movie)
{
cout << "-----------------------";
cout << "\nTitle: " << movie.title << endl;
cout << "Director: "<< movie.director << endl;
cout << "Year: " << movie.year << endl;
cout << "Runing Time: " << movie.runningTime << " minutes"
<< endl;
}
[一个人输入跑步时间后,他们将按Enter键或之后返回。由于您没有要读取的输入或返回代码,因此下一次调用getline
以读取下一部电影的标题将得到它。
我的建议是不要使用这样的代码:
cin >> b.year;
您真正想做的事是在line中阅读的,但是您使用代码来阅读数字。常见的解决方法是,每次读入不是行而是要读取行的内容后,都使用cin.ignore()
。我个人觉得这很尴尬,但这很常见。