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)个字符串作为输入。 这是什么原因?
答案 0 :(得分:4)
for
循环确实针对n
次迭代运行,而getline
确实会读入n
行。考虑一下这个输入:
2
First
Second
在该输入中有三行(不是两行!):2\n
,First\n
和Second\n
。
您的格式化输入(cin>>n
)读取第一行的部分:2
。然后循环运行两次,读取此数据:\n
和First\n
。永远不会读到第三行和最后一行(Second\n
)。
解决方案是在循环开始之前从第一行读取\n
。这可以通过各种方式实现。这是一个:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')