所以我对C ++比较陌生,我正在做一个小项目,我让用户输入电影名称,评级和年份。对于第一次运行,该程序运行良好。用户输入所需信息后,我将其打印回屏幕,没有任何问题。但是,当我在同一次运行中创建第二个电影对象以执行相同的操作时,它会跳过它要求标题的部分并直接进入评级。有任何想法吗?这很可能是一个菜鸟错误。我的代码如下。
MovieProject.cpp
#include "stdafx.h"
#include "Movie.h"
#include <iostream>
#include <string>
using namespace std;
int main()
{
Movie starwars;
starwars.MovieTeller(starwars);
Movie FerrisBueller;
FerrisBueller.MovieTeller(FerrisBueller);
Movie TheFoxandTheHound;
TheFoxandTheHound.MovieTeller(TheFoxandTheHound);
return 0;
}
Movie.cpp
#include "stdafx.h"
#include "Movie.h"
#include <string>
#include <iostream>
using namespace std;
Movie::Movie()
{
cout << "What is the title of your movie:";
getline(cin,Title);
cout << "What is the Rating:";
getline(cin,Rating);
cout << "What year was it made:";
cin >> Year;
cout << "\n" << endl;
if (Year > 2016) {
cout << "Comon Dude stop messing around" << endl;
exit(404);
}
}
void Movie::MovieTeller(Movie a) {
cout << "Title:" << Title << "\n" << "Rating:" << Rating << "\n" << "Year:" << Year << "\n" << endl;
}
Movie::~Movie()
{
}
Movie.h
#pragma once
#include <iostream>
using namespace std;
class Movie
{
public:
Movie();
~Movie();
void MovieTeller(Movie a);
private:
string Title;
string Rating;
int Year;
};
答案 0 :(得分:1)
在您使用getline
运算符读取数字后使用>>
时会发生这种情况。
以下是正在发生的事情:cal cin >> Year
读取用户输入的所有数字,但保留尾随\n
,因为它不是数字的一部分。在下一个对象的构造函数中调用getline
时,\n
仍然存在,因此getline
将此输入计为空行。
您可以在阅读完年份后添加getline
并忽略其结果来解决此问题。但是,更好的方法是从构造函数中完全删除输入,并将其移动到类的自定义输入运算符中。这样你的代码就会更清晰。
答案 1 :(得分:0)
代码还有另一个问题:方法MovieTeller
不作用于作为此方法的参数传递的实例。它应该是
void Movie::MovieTeller(Movie a) {
cout << "Title:" << a.Title << "\n" << "Rating:" << a.Rating << "\n" << "Year:" << a.Year << "\n" << endl;
}
OR此方法应声明为不带任何输入参数的公共方法。