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\n
、First\n
和 Second\n
。
您的格式化输入 (cin>>n
) 显示为第一行的 部分 :2
。然后循环 运行s 两次,读取此数据:\n
和 First\n
。第三行也是最后一行 (Second\n
) 从未被阅读。
解决方法是在循环开始之前从第一行读取\n
。这可以通过多种方式完成。这是一个:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')
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\n
、First\n
和 Second\n
。
您的格式化输入 (cin>>n
) 显示为第一行的 部分 :2
。然后循环 运行s 两次,读取此数据:\n
和 First\n
。第三行也是最后一行 (Second\n
) 从未被阅读。
解决方法是在循环开始之前从第一行读取\n
。这可以通过多种方式完成。这是一个:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')