【问题标题】:C++ How do I store a different number of values to my variables in a structure that contains two variables?C++ 如何将不同数量的值存储到包含两个变量的结构中的变量?
【发布时间】:2019-12-01 05:36:08
【问题描述】:

到目前为止,这是我的代码。 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;


    }

【问题讨论】:

    标签: c++ function variables structure


    【解决方案1】:

    当一个人进入运行时间时,他们会在之后点击进入或返回。由于您没有读取该输入或返回的代码,因此下次调用 getline 以读取下一部电影的标题将得到它。

    我的建议是不要使用这样的代码:

        cin >> b.year;
    

    您真正想做的是在中读取,但是您使用代码来读取数字。一个常见的解决方法是在每次读取不是一行但要读取一行的内容后使用cin.ignore()。我个人觉得这很尴尬,但很常见。

    【讨论】:

      【解决方案2】:

      这是解决这个问题的另一种方法

      #include<iostream>
      #include<string>
      
      using namespace std;
      
      struct MovieData {
      string Title;
      string Director;
      unsigned short YearReleased;
      unsigned short RunningTime;
      };
      
      void print(MovieData &md) {
      cout << "Title: " << md.Title << endl
      << "Director: " << md.Director << endl
      << "Year Released: " << md.YearReleased << endl
      << "Running Time: " << md.RunningTime << " minutes" << endl;
      }
      
      int main() {
      MovieData movFirst, movSecond;
      movFirst.Title = "Starship Troopers";
      movFirst.Director = "Paul Verhoeven";
      movFirst.YearReleased = 1997;
      movFirst.RunningTime = 129;
      movSecond.Title = "Alien vs. Predator";
      movSecond.Director = "Paul W. S. Anderson";
      movSecond.YearReleased = 2004;
      movSecond.RunningTime = 108;
      cout << endl;
      print(movFirst);
      cout << endl;
      print(movSecond);
      cout << endl;
      system("pause");
      return 0;
      }
      

      【讨论】:

      • 最好也解释一下你的代码。
      猜你喜欢
      • 1970-01-01
      • 2022-01-22
      • 2014-02-22
      • 2021-12-26
      • 2011-10-01
      • 2013-10-03
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多