getline C++ 未获得所需的结果[重复]

问题描述 投票:0回答:3

编译器版本为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;
}

当我输入 2 时。它要求输入一次。当3次再2次。等等。请解决。谢谢。

c++ getline
3个回答
2
投票

第一个

getline
调用读取 N 被读取后仍位于输入缓冲区中的
end-of-line
字符。

将其视为以下输入:

3 First string
Second string
Third string

在您的情况下,第一个字符串只是空。

如果您想忽略

N
之后的空格,请编写类似

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

(将跳至行尾),或

cin >> N >> std::ws;

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


0
投票

输入

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]);
}

这将在

for()
循环之前刷新缓冲区。


0
投票

问题是,当按 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.