使用多个 getline 调用读取多行

Using multiple getline calls to read multiple lines

我正在使用多个 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() 调用?

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

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

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

for 循环允许您通过重复相同的代码来消除重复的代码,但参数略有不同。没有重复的代码,所以 for 在这里对你没有任何作用。

不确定 cin.ignore() 行的目标是什么。它将丢弃第二行输入的第一个字符。如果那是您想要的,groovy 如果不是,请重新考虑。

看起来你在代码的前面调用了某种形式的 cin >> someString;

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