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

Getline() combined with cin.ignore() is not storing variable? (Bug)

本文关键字:变量 错误 存储 ignore 结合 cin Getline      更新时间:2023-10-16

我不认为这个问题不是这个的重复。虽然是由同样的原因引起的,但却是问题的不同表现。


当我运行这个程序时,终端输出看起来像这样(我的输入是1Rock Lee,然后是enter):

输入数字:1

输入您的姓名:Rock Lee

Name为空

但是,名称不应该是空的。为什么名称变量是"" ?我如何修复这个bug?下面是代码:

#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

输入您的姓名:name为空。

它甚至不给我机会输入我的名字。我该如何解决这个问题?

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