对s[0]初始化,为何仍显示字符串中的字符无效?为何当i=0时,无法输入?

img

img

img

图三:比如输入n=4时,我只能输入的字符串数为3而非4
(第一次无法输入,为何?)
(为何当i=0时,getline无法输入,当但i>0时就可以?)

这是部分原码:

int count_p = 0, count_t = 0, count_a = 0, pos_p = 0, pos_t = 0;
int i;
char** s;
cout << "请输入字符串数" << endl;
int n;
cin >> n;
s = new char* [n];
for (i = 0; i < n; i++)
{
    s[i] = new char[11];
    cin.getline(s[i], 11);
}

在cin.getline语句前加了getchar(),便解决了该问题,其实在输入a值时按了回车键, cin.getline读入了回车,于是回车被当作参数传递给了函数,将getchar()加到其前便可解决问题。

img

#include <iostream>
#include<malloc.h>

using namespace std;
int main() {
    int count_p = 0, count_t = 0, count_a = 0, pos_p = 0, pos_t = 0;
    int i;
    char** s;
    cout << "请输入字符串数" << endl;
    int n;
    cin >> n;
    s = new char* [n];
    getchar();
    for (i = 0; i < n; i++)
    {
        s[i] = new char[11];
        cin.getline(s[i], 11);
    }
}

上次输入的回车被getline读进去了

int n;
cin >> n;
fflush(stdin);  //加上这一句,
s = new char *[n];