因此,我对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;
}
电影.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()
{
}
电影.h
#pragma once
#include <iostream>
using namespace std;
class Movie
{
public:
Movie();
~Movie();
void MovieTeller(Movie a);
private:
string Title;
string Rating;
int Year;
};
当您使用getline
带有>>
运算符的数字读取时,这种情况一直发生。
这是发生了什么:calcin >> Year
从用户输入中读取所有数字,但保留尾随\n
位置,因为它不是数字的一部分。getline
在下一个对象的构造函数中调用when时,\n
它仍然存在,因此getline
将此输入计为空行。
您可以通过getline
在阅读年份后添加并忽略其结果来解决此问题。但是,更好的方法是从构造函数中完全删除输入,然后将其移到类的自定义输入运算符中。这样,您的代码将更加整洁。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句