C++ c++;减少1个输入 intmain() { int n; cin>>n; 字符串str1[n]; 对于(int i=0;i

C++ c++;减少1个输入 intmain() { int n; cin>>n; 字符串str1[n]; 对于(int i=0;i,c++,string,getline,C++,String,Getline,< < < /COD> >循环运行为 N< /代码>迭代,并且 GETLINE 确实读取 N< /代码>行。考虑此输入: int main() { int n; cin>>n; string str1[n]; for(int i=0;i<n;i++) getline(cin,str1[i]); return 0; } 在该输入中有三行(不是两行):2\n,First\n和Second\n 格式化输入(cin>>n)读取第一行的一部分:2。然后循环运行两次,读取此数

< <代码> < < /COD> >循环运行为<代码> N< /代码>迭代,并且<代码> GETLINE 确实读取<代码> N< /代码>行。考虑此输入:

int main() 
{
int n;
cin>>n;
string str1[n];
for(int i=0;i<n;i++)
    getline(cin,str1[i]);
return 0;
}
在该输入中有三行(不是两行):
2\n
First\n
Second\n

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

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

2
First
Second
std::cin.ignore(std::numeric_limits::max(),“\n”)

一个相关问题提供了修复。相关问题:。修复:添加
std::cin.ignore(std::numeric\u limits::max(),'\n')
cin>>n之后;
@Robᵩ 谢谢,解决了我的问题。[OT]
string str1[n];
是一个可变长度数组,不是标准数组。您可以将其更改为
std::vector str1(n);
@NathanOliver-我是新手。请您解释一下
string str1[n];
不应该被使用。它工作得很好(在更正了之前的代码)GibreelAbdullah不是标准的,这意味着C++标准不包含在C++的特性中。有些编译器像C++一样允许它作为编译器扩展,因为它允许在C99中使用。最好使用向量,因为向量是标准的一部分。
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')