使用多个getline调用来读取多行

时间:2016-04-02 14:48:55

标签: c++ string cin getline

我正在使用多个getline(cin, string)调用来获取两个字符串;但是代码正在跳过第二个调用而只处理第一个调用。

for (int i = 0; i < 2; ++i)
{
    if (i == 0)
    {
        cout << "Please enter string A: " << endl;
        getline(cin, stringA);
    }

    if (i == 1)
    {
        cout << "Please enter string B: " << endl;
        cin.ignore();
        getline(cin, stringB);
    }
}

如何更改此项以处理多个getline()调用?

enter image description here

2 个答案:

答案 0 :(得分:0)

无法使用给定的代码重现不良行为。 Bug可能在其他地方。

无论如何,代码可以更简单,并且可以解决其他问题:

cout << "Please enter string A: " << endl;
getline(cin, stringA);
cout << "Please enter string B: " << endl;
cin.ignore(); 
getline(cin, stringB);

for循环允许您通过重复相同的代码来消除重复的代码,但参数的差异很小。没有重复的代码,因此for对您没有任何帮助。

不确定cin.ignore()行的目标是什么。它会丢弃第二行输入的第一个字符。如果这就是你想要的,那么如果没有,那就重新考虑。

答案 1 :(得分:0)

您似乎在代码的前面调用了某种形式的cin >> someString;

如果是这样,它可能在输入流中留下了换行符。因此,当第一个getline()被调用时,它将立即将该换行符存储在stringA中,然后等待stringB的输入。考虑将getline()用于所有输入,或在每次使用getline()之后调用“虚拟” cin >> ...;。此伪getline()将清除输入流,避免此类错误。