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

getline() function in c++ takes 1 less input

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) 个字符串作为输入。 这是什么原因?

for 循环执行 运行 n 次迭代,getline 确实读取 n 行。考虑这个输入:

2
First
Second

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

您的格式化输入 (cin>>n) 显示为第一行的 部分 2。然后循环 运行s 两次,读取此数据:\nFirst\n。第三行也是最后一行 (Second\n) 从未被阅读。

解决方法是在循环开始之前从第一行读取\n。这可以通过多种方式完成。这是一个:

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