c ++中的getline()函数减少了1个输入

时间:2015-09-17 18:08:27

标签: c++ string getline

int main() 
{
int n;
cin>>n;
string str1[n];
for(int i=0;i<n;i++)
    getline(cin,str1[i]);
return 0;
}

我编写了一个输入n个字符串的代码,但代码只接受(n-1)个字符串作为输入。 这是什么原因?

1 个答案:

答案 0 :(得分:4)

for循环确实针对n次迭代运行,而getline确实会读入n行。考虑一下这个输入:

2
First
Second

在该输入中有三行(不是两行!):2\nFirst\nSecond\n

您的格式化输入(cin>>n)读取第一行的部分2。然后循环运行两次,读取此数据:\nFirst\n。永远不会读到第三行和最后一行(Second\n)。

解决方案是在循环开始之前从第一行读取\n。这可以通过各种方式实现。这是一个:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')