创建第二个对象后,构造函数程序将不会询问我将getline用于什么

马尔科姆

因此,我对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;
};
谢尔盖·卡里尼琴科(Sergey Kalinichenko)

当您使用getline带有>>运算符的数字读取时,这种情况一直发生

这是发生了什么:calcin >> Year从用户输入中读取所有数字,但保留尾随\n位置,因为它不是数字的一部分。getline在下一个对象的构造函数中调用when时\n它仍然存在,因此getline将此输入计为空行。

您可以通过getline在阅读年份后添加并忽略其结果来解决此问题但是,更好的方法是从构造函数中完全删除输入,然后将其移到类的自定义输入运算符中。这样,您的代码将更加整洁。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MinGW将类中对象的第二个声明视为构造函数

来自分类Dev

游标将不会获取第二个值

来自分类Dev

当我将0作为getline的第二个参数传递时会发生什么?

来自分类Dev

如果类的构造函数需要第二个对象的指针对象,那么UML关系是什么?

来自分类Dev

为什么构造函数没有得到数组中第二个对象的调用

来自分类Dev

ArrayAdapter() 构造函数中的第二个参数是什么?

来自分类Dev

AngularJS $ http不会触发第二个.then函数

来自分类Dev

可以将第二个参数传递给Controller构造函数吗?

来自分类Dev

可以将第二个参数传递给Controller构造函数吗?

来自分类Dev

改造不会序列化我的响应类中的第二个对象

来自分类Dev

Java不会读取我的第二个进程

来自分类Dev

为什么我的引导程序没有将第二个扇区加载到内存中?

来自分类Dev

为什么同时使用两个getline函数,第二个不带\ n字符?

来自分类Dev

将函数应用于列表中的每个第二个元素

来自分类Dev

将函数应用于列表,然后遍历r中的第二个变量

来自分类Dev

模板功能声明中函数名称后的第二个<>是什么?

来自分类Dev

如何创建jquery对象的第二个实例?

来自分类Dev

从类创建第二个对象

来自分类Dev

为什么我的第二个函数不返回任何东西?

来自分类Dev

为什么我的递归函数不接受第二个参数?

来自分类Dev

C#UWP为什么我不能添加第二个事件处理程序?

来自分类Dev

为什么我的程序不执行第二个catch块?

来自分类Dev

当错误存在时,为什么我的程序不执行第二个catch块?

来自分类Dev

将函数的第二个参数读入数组

来自分类Dev

将第二个参数传递给函数

来自分类Dev

用第一个构造函数执行第二个构造函数

来自分类Dev

由于尚未创建第二个表,因此在构造函数中创建多对多表崩溃

来自分类Dev

在我的本地仓库中添加了第二个Heroku应用程序,我被拒绝访问我的应用程序

来自分类Dev

此代码中的第二个scanf将不会被读取。(C代码)

Related 相关文章

  1. 1

    MinGW将类中对象的第二个声明视为构造函数

  2. 2

    游标将不会获取第二个值

  3. 3

    当我将0作为getline的第二个参数传递时会发生什么?

  4. 4

    如果类的构造函数需要第二个对象的指针对象,那么UML关系是什么?

  5. 5

    为什么构造函数没有得到数组中第二个对象的调用

  6. 6

    ArrayAdapter() 构造函数中的第二个参数是什么?

  7. 7

    AngularJS $ http不会触发第二个.then函数

  8. 8

    可以将第二个参数传递给Controller构造函数吗?

  9. 9

    可以将第二个参数传递给Controller构造函数吗?

  10. 10

    改造不会序列化我的响应类中的第二个对象

  11. 11

    Java不会读取我的第二个进程

  12. 12

    为什么我的引导程序没有将第二个扇区加载到内存中?

  13. 13

    为什么同时使用两个getline函数,第二个不带\ n字符?

  14. 14

    将函数应用于列表中的每个第二个元素

  15. 15

    将函数应用于列表,然后遍历r中的第二个变量

  16. 16

    模板功能声明中函数名称后的第二个<>是什么?

  17. 17

    如何创建jquery对象的第二个实例?

  18. 18

    从类创建第二个对象

  19. 19

    为什么我的第二个函数不返回任何东西?

  20. 20

    为什么我的递归函数不接受第二个参数?

  21. 21

    C#UWP为什么我不能添加第二个事件处理程序?

  22. 22

    为什么我的程序不执行第二个catch块?

  23. 23

    当错误存在时,为什么我的程序不执行第二个catch块?

  24. 24

    将函数的第二个参数读入数组

  25. 25

    将第二个参数传递给函数

  26. 26

    用第一个构造函数执行第二个构造函数

  27. 27

    由于尚未创建第二个表,因此在构造函数中创建多对多表崩溃

  28. 28

    在我的本地仓库中添加了第二个Heroku应用程序,我被拒绝访问我的应用程序

  29. 29

    此代码中的第二个scanf将不会被读取。(C代码)

热门标签

归档