C++ getline C++;没有得到所需的结果

C++ getline C++;没有得到所需的结果,c++,getline,C++,Getline,编译器版本为4.2 g++ #include <iostream> #include <string> using namespace std; int main() { string a[10]; int i; int N; cin>>N; for (i=0; i<N; i++) { getline(cin,a[i]); } return 0; } #包括 #包括 使用名称空间std; int main() { 字符串a[10]; int

编译器版本为4.2 g++

#include <iostream>
#include <string>
using namespace std;
int main()
{

string a[10];
int i;
int N;
cin>>N;
for (i=0; i<N; i++)
{
    getline(cin,a[i]);
}
return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
字符串a[10];
int i;
int N;
cin>>N;

对于(i=0;i第一个
getline
调用读取在读取N之后仍位于输入缓冲区中的
行尾
字符

将其视为以下输入:

3 First string
Second string
Third string
在您的例子中,第一个字符串只是空的

如果要忽略
N
后面的空格,请编写如下代码

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

(将跳过所有空白字符,包括行尾)。

N
输入一个值后,缓冲区中还有一个
\N
(行尾)字符。第一个getline将其视为第一个字符,并返回一个空字符串。只需执行以下操作:

string a[10];
int i;
int N;
cin>>N;
cin.ignore(INT_MAX);//flush buffer
for (i=0; i<N; i++)
{
    getline(cin,a[i]);
}
字符串a[10];
int i;
int N;
cin>>N;
cin.ignore(INT_MAX);//刷新缓冲区

对于(i=0;i而言,问题在于当按enter键或空格键时,它也会将其作为输入

 #include <iostream>
 include <string>
 using namespace std;
   main()
 {

string a[10];
int i;
 int N;
 cin >> N >> std::ws;
for (i=0; i<N; i++)
{

getline(cin,a[i]);

}
 return 0;
}
#包括
包括
使用名称空间std;
main()
{
字符串a[10];
int i;
int N;
cin>>N>>std::ws;

对于(i=0;如果
N>10
,i您将有未定义的行为,您应该将
a
更改为
向量a(N)
。让你大饱眼福的是大量的重复:那么我该如何纠正它?使用什么函数?我已经更新了答案。这表明了交互式输入。当stdin从文件重定向时,这种解决方案将表现不正确。实际上,这需要输入N次:)@Inspired i未获得uI意味着此代码按预期等待用户输入N次,但[0]仍将包含空字符串。@Inspired thnx for u edit i已更改
 #include <iostream>
 include <string>
 using namespace std;
   main()
 {

string a[10];
int i;
 int N;
 cin >> N >> std::ws;
for (i=0; i<N; i++)
{

getline(cin,a[i]);

}
 return 0;
}