getline()函数有问题吗?

时间:2014-01-06 14:45:02

标签: c++

我在下面的代码中遇到getline函数的问题。在“获取”信息部分,我希望能够存储整个句子,但我无法使其工作。

当我打开我的程序时,它只是跳过信息的输入。

p.s:我是C ++的新手

以下是我遇到问题的代码部分(输入信息):

void add() {
    string name;
    string faction;
    string classe;
    string race;
    string info;

    ofstream wowdatabase("wowdatabase.txt", ios::app);
    cout << "Add a race or class" << endl;
    cout << "---------------------------------------------------------" << endl;
    cout << "" << endl;
    cout << "Enter the name of the race or class (only small letters!):" << endl;
    cin >> name;

    cout << "Enter Race (Type -, if writen in name section):" << endl;
    cin >> race;

    cout << "Enter Class (Type -, if writen in name section):" << endl;
    cin >> classe;

    cout << "Enter faction (Alliance/Horde):" << endl;
    cin >> faction;

    cout << "Enter the information:" << endl;
    getline(cin, info);

    wowdatabase << name << ' ' << faction << ' ' << classe << ' ' << race << ' ' << info << endl;
    wowdatabase.close();
    system("CLS");
    main();
}

现在它工作正常=)但是,当我想再次输出信息时,它只显示句子中的第一个单词?

2 个答案:

答案 0 :(得分:2)

在此声明之前

getline(cin, info);

进行以下调用

cin.ignore( numeric_limits<streamsize>::max(), '\n' );

要使用此来电,您必须包含标题<limits>

问题在于执行语句

之后
cin >> faction;

与输入键ENTER对应的新行字符位于输入缓冲区中,下一个getline调用将读取此字符。

答案 1 :(得分:0)

读完分数后,空行字符将被遗留。随后对getline的调用将会读取它。为避免在getline来电之前添加对cin.ignore的通话。