在C++中按回车键时,如何阻止setter函数填充所有变量?[已关闭]

lrpiutwd  于 2023-02-17  发布在  其他
关注(0)|答案(2)|浏览(107)

**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
18小时前关门了。
Improve this question
我创建了一个类,在其中定义字符串和整数数据类型的成员变量。
当为一个新对象调用该函数时,我键入字符串值,按Enter键,剩下的所有变量都被赋予某个默认值,然后我的程序结束。
我不知道如何阻止它刚刚结束,并让我键入每个字符串值。
下面是我的代码的副本:

#include <iostream>     //Header file needed to do inputs and outputs
#include <iomanip>      //Header file needed to use setw
#include <math.h>       //Header file needed to use power function
using namespace std;

class MovieData
{
    private:
        string title, director;
        int year, runTime;

    public:
        void setInfo()
        {  
            cout << "Movie title: ";
            cin >> title;
            cout << "Diector: ";
            cin >> director;
            cout << "Year: ";
            cin >> year;
            cout << "Runnign Time: ";
            runTime;
        }
        void displayInfo ()
        {
            cout << "Movie title " << title << endl;
            cout << "Director " << director << endl;
            cout << "Year " << year << endl;
            cout << "Run Time " << runTime << endl;
        }
};

int main() {
    MovieData movie1, movie2;

    movie1.setInfo();
    movie2.setInfo();

    movie1.displayInfo();
    movie2.displayInfo();

    return 0;
}

我试着将字符串变量定义为c-string,也就是字符数组,看看这是否有助于解决问题,但结果是一样的。

svmlkihl

svmlkihl1#

更改此行

runTime;

cin >> runTime;
k5hmc34c

k5hmc34c2#

在其他注解和答案中指出了一些问题,但主要问题是这段代码:

cout << "Movie title: ";
cin >> title;
cout << "Director: ";
cin >> director;

在字符串上使用>>只能读取一个**单词,所以如果你输入Lord of the Rings,那么title将等于"Lord"director将等于"of",等等。
如果你想阅读整行文本,那么使用std::getline()

cout << "Movie title: ";
getline(cin, title);
cout << "Director: ";
getline(cin, director);

当你开始使用getline()时,阅读(并理解)这篇文章是非常重要的:
Why does std::getline() skip input after a formatted extraction?

相关问题