Getline只获取一部分信息
getline takes only a piece of the information
class MovieData
{
private:
string Title;
string Director;
int Year;
int Time;
public:
MovieData();
void setTitle(string Title);
void setDirector(string Director);
void setYear(int Year);
void setTime(int Time);
string getTitle();
string getDirector();
int getYear();
int getTime();
};
MovieData::MovieData()
{
Title = "";
Director = "";
Year = 0;
Time = 0;
}
void MovieData::setTitle(string title)
{
Title = title;
}
void MovieData::setDirector(string director)
{
Director = director;
}
void MovieData::setYear(int year)
{
Year = year;
}
void MovieData::setTime(int time)
{
Time = time;
}
string MovieData::getTitle()
{
return Title;
}
string MovieData::getDirector()
{
return Director;
}
int MovieData::getYear()
{
return Year;
}
int MovieData::getTime()
{
return Time;
}
void readMovieData(MovieData *, int);
void MovieDatastats(MovieData *, int);
这是我的类,定义和原型函数在这里....它们都在同一个主区这是我的身体
int main()
{
int amount = 0;
cout << "How many movies did you watch last month? ";
cin >> amount;
MovieData *pMovie;
pMovie = new MovieData[amount];
cout << "Please enter the information of your Movies!" << endl;
readMovieData(pMovie, amount);
cout << "nHere are the information with your Movies!" << endl;
MovieDatastats(pMovie, amount);
}
对于那些以前一直帮助我的人,我通过我的原型函数修复了它。当不需要时,我使用(MovieData *pMovie, int const size)作为参数。非常感谢你的帮助!我不需要两次调用同一个对象,因为它们会相互冲突。现在,这里是我的函数,我一直坚持,我不知道为什么…
void readMovieData(MovieData *pMovie, int const size)
{
string title;
string director;
int year;
int time;
for(int i = 0; i < size; i++)
{
cout << "nPlease enter the Title of the movie: ";
getline(cin,title);
pMovie[i].setTitle(title);
cin.ignore();
cout << "Please enter the Director name of the movie: ";
getline(cin,director);
pMovie[i].setDirector(director);
cin.ignore();
cout << "Please enter the year it was released: ";
cin >> year;
if(year >= 1900 && year <= 2004)
pMovie[i].setYear(year);
else
{
cout << "nPlease enter a year between 1900 and 2004." << endl;
year = 0;
system("PAUSE");
break;
}
cout << "Please enter the time the movie last: ";
cin >> time;
if(time > 0 && time < 14400)
pMovie[i].setTime(time);
else
{
time = 0;
cout << "nPlease enter a time between 0 and 14400 in minutes." << endl;
system("PAUSE");
break;
}
}
}
void MovieDatastats(MovieData *pMovie, int const size)
{
float sumTime = 0.0;
float averageTime = 0.0;
for (int i = 0; i < size; i++)
{
sumTime +=pMovie[i].getTime();
}
averageTime = sumTime/size;
cout << "nYour average time of all your movie is: " << averageTime << endl;
int oldYear = 0;
int count = 0;
int recentYear = 0;
int counter = 0;
oldYear = pMovie[0].getYear();
recentYear = pMovie[0].getYear();
for (int j = 1; j < size; j++)
{
if(pMovie[j].getYear() < oldYear)
{
oldYear = pMovie[j].getYear();
count = j;
}
else if(pMovie[j].getYear() > recentYear)
{
recentYear = pMovie[j].getYear();
counter = j;
}
}
cout << "nThe oldest Movie you have watched is called..." << endl;
cout << "Title: " << pMovie[count].getTitle() << endl;
cout << "Director: " << pMovie[count].getDirector() << endl;
cout << "Release Year: " << pMovie[count].getYear() << endl;
cout << "nThe most newest Movie you have watched is called..." << endl;
cout << "Title: " << pMovie[counter].getTitle() << endl;
cout << "Director: " << pMovie[counter].getDirector() << endl;
cout << "Release Year: " << pMovie[counter].getYear() << endl;
}
一旦我运行程序并输入信息,我可以输入标题和导演的名字,但一旦我到了我得到的年份,程序将不再接受任何东西并结束。从下面的输出中可以看到,它跳过了Title,并去掉了单词的第一个字母。我该如何解决这个问题?
这是我的输出。
上个月你看了多少部电影?2请输入您的电影信息!
请输入影片名称:《鲨鱼袭击》
请输入影片导演名称:随机名称
请输入发布年份:
请输入1900到2004之间的年份。
按任意键继续…
这里是你的电影信息!
你所有电影的平均时间是:0
你看过的最古老的电影是…
标题:导演:哈克攻击
发行年份:0
你看过的最新电影叫……
标题:导演:哈克攻击
发行年份:0
进程返回0 (0x0)执行时间:19.781 s按任意键继续
.
在cin >> amount;
之后,您在流中仍然有一个新行,因此当调用getline(cin,title)
时,新行将分配给title
, title
将为空。然后使用默认参数调用ignore()
: streamsize n = 1, int_type delim = traits_type::eof()
,如果程序没有收到EOF,它将丢弃您输入的一个字符。你不需要在getline()
之后调用ignore()
。
删除所有的cin.ignore();
,并在getline(cin, title);
上面添加这一行:cin.ignore(A_BIG_NUMBER, 'n');
,它将工作
使用system("PAUSE")后的换行符来中断for循环
- 正在查找文档以获得PS4平台的C++中的设备信息
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- C++:如何使函数只返回作为列表一部分的字符串
- 如何设置一个范围来提取我想要获得的信息
- std::sort()函数无法对向量的一部分进行排序
- 系统参数信息A 与 SPI_GETMOUSE 返回 0
- 为什么 gcovr 会生成空覆盖率统计信息?
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 将类型声明为类型模板参数的模板参数的一部分是否合法?
- 反转整数的一部分(一半)的函数
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么
- 调试符号中缺少 QObject 类信息(编辑但存在其他 Qt 类)
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- C 指针和对象作为不同类的一部分
- Pisarze - 来自波兰奥林匹克信息学的数据分析任务
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- 在TXT文档的一部分中查找信息并将其存储在变量中
- Getline只获取一部分信息