Getline()结合cin.ignore()不存储变量? (错误)

时间:2015-07-06 22:07:46

标签: c++

我不认为这个问题不是this的重复。即使它是由同一件事引起的,但它是问题的不同表现形式。

运行此程序时的终端输出如下所示(我的输入为1Rock Lee后跟enter):

  

输入一个数字:1

     

输入您的姓名:Rock Lee

     

名称为空白。

但是,名称不应为空白。为什么名称变量为""?我该如何解决这个错误?这是代码:

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

int main () {

    int num;

    string name;

    cout << "Enter a number: ";
    cin >> num;

    cout << "Enter your name: ";
    getline(cin, name, '\n');

    cin.ignore (1000, '\n');

    if (name == "")
    {
        cout << "Name is blank.";
        return -1;
    }

    return 0;
}

另外,请注意我想在解决方案中使用Getline(),我希望能够读取整行(因此名称可以是任何内容,而不仅仅是名字和姓氏)。

当我尝试评论cin.ignore(1000, '\n');时,它输出的结果也不正确:

  

输入一个数字:1

     

输入您的姓名:姓名为空白。

它甚至没有机会输入我的名字。我该如何解决?

1 个答案:

答案 0 :(得分:2)

cin >> num读取直到它看到空格,但它不会丢弃空格,因此它会在输入中留下'\n'。您对getline的调用会看到它并立即返回,使用空字符串填充name。您需要在cin.ignore之前致电getline,以忽略'\n'留下的cin::operator>>