编译器版本为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次。等等。请解决。感谢。
答案 0 :(得分:2)
在读取N后,第一个getline
调用读取仍位于输入缓冲区中的end-of-line
字符。
将此视为以下输入:
3 First string
Second string
Third string
在您的情况下,第一个字符串只是空的。
如果要忽略N
之后的空格,请写一些类似
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')
(将跳至行尾)或
cin >> N >> std::ws;
(将跳过所有空白字符,包括行尾)。
答案 1 :(得分: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()
循环之前刷新缓冲区。
答案 2 :(得分:0)
问题是,当按下输入或空格时,它也将其作为输入
#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;
}