使用getline()函数时running time error

需要输入n行带有空格的string字符串。但是还没输入完,程序就结束了。
进行输入的代码片段如下:

int n;
cin>>n;
string s[n];
for(int i=0;i<n;i++)
{
    getline(cin,s[i]);
}

然后就出现了以下情况:

img

请问这是为什么?如何解决呢?


在cin>>n后,加一句getchar(),接收输入3之后的换行符。因为输入3后面的换行符还在输入缓冲区,getline遇到换行符就认为是一行,所以你看着只输入两行字符串,但实际getline已接收完3行了

您的程序可能出现了缓冲区溢出的问题。在输入 n 的时候,您使用了 cin,但是 cin 会将回车符留在输入缓冲区中。在接下来的 getline 函数中,getline 函数会读取输入缓冲区中的回车符,然后认为该行输入已经结束,从而导致您无法输入完所有字符串。
为了解决这个问题,您可以在输入 n 的时候,使用 getline 函数将回车符读取掉。具体的代码如下:


```c++
int n;
string line;
getline(cin, line);
n = stoi(line);
string s[n];
for (int i = 0; i < n; i++) {
    getline(cin, s[i]);
}


```
在这个代码中,我们首先使用 getline 函数读取输入缓冲区中的一行,然后将这一行转换为整数 n。接下来,我们就可以使用 getline 函数读取 n 行字符串了。这样做可以避免输入缓冲区溢出的问题。
我也是新手,应该是这样的吧!