我正在使用多个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()调用?
答案 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()
将清除输入流,避免此类错误。