通过 cin.getline 函数输入一行时命令意外中止

The command aborts unexpectedly while entering a line through the cin.getline function

通过 cin.getline 函数输入一行时命令意外中止

3
曼联
2
C罗葡萄牙
鲁尼英格兰
埃弗顿
2
鲁尼英格兰
巴克利英格兰
皇家马德里
3
菲戈葡萄牙
C罗葡萄牙
贝尔威尔士
葡萄牙

输出:
曼联
皇家马德里

using namespace std;

struct footballer {
    string footballer_name;
    char* country = new char;
};

struct club {
    char* club_name = new char[10001];
    int footballersCount;
    footballer* footballers;
};


int main(){
    int number_of_clubs;
    cin >> number_of_clubs;
    struct club struct_club[1001];
    struct footballer struct_footballer[100][100];
    for (int i = 0; i < number_of_clubs; i++) {
        cin.getline(struct_club[i].club_name, 256);
        cin >> struct_club[i].footballersCount;
        for (int j = 0; j < struct_club[i].footballersCount; j++) {
            cin >> struct_footballer[i][j].footballer_name >> struct_footballer[i][j].country;
        }
    }
    for (int i = 0; i < number_of_clubs; i++) {
        cout << struct_club[i].club_name << endl;
        cout << struct_club[i].footballersCount << endl;
        for (int j = 0; j < struct_club[i].footballersCount; j++) {
            cout << struct_footballer[i][j].footballer_name << " " << struct_footballer[i][j].country << endl;
        }
    }
}

那是因为每次在 cin>> 之后使用 cin.getline() 时都必须使用 cin.ignore(),因为 cin>> 将新行 ch 留在缓冲区中。 只需添加 cin.ignore();作为您进入第一个循环时的第一行。