C++ 如何将不同数量的值存储到包含两个变量的结构中的变量?

Posted

技术标签:

【中文标题】C++ 如何将不同数量的值存储到包含两个变量的结构中的变量?【英文标题】:C++ How do I store a different number of values to my variables in a structure that contains two variables? 【发布时间】: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;


    

【问题讨论】:

【参考方案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;

【讨论】:

最好也解释一下你的代码。

以上是关于C++ 如何将不同数量的值存储到包含两个变量的结构中的变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中比较两个结构字符串

如何使用 Swift 将具有两个不同键的两个值存储到数组或字典中? [关闭]

添加两个变量,其中包含来自同一数据库的两个不同表的值

是否可以在 awk 中使用两个不同的字段分隔符并将两者的值存储在变量中?

如何将来自先前类的值存储到 C++ 中的向量中?

浏览结构数组并存储值不正常的值