Проблема с char

Всем привет. Такое дело у меня есть структура и в этой структуре находится переменная char name[20]. Затем создается массив состоящий из этих структур и пользователь вводит в ручную данные. Все работает нормально но когда я ввожу с клавиатуры имя и фамилию через пробел программа заканчивает работу. Через getline пытался он просто не дает ввести имя и пропускает его переходя к следующему. Что можно сделать?

#include <iostream>
#include <Windows.h>
#include <string>

using namespace std;

struct STUDENT
{
    char name[20] = "";
    int num;
    double score[5];
};

void GetData(STUDENT* M, int N)
{
    int i;
    for (i = 0; i < N; i++)
    {
        cout << endl << "_________________________________________________" << endl;

        cout << "Имя и фамилия: ";
        cin >> M[i].name;

        cout << endl;
        cout << "Номер группы: ";
        cin >> M[i].num;

        for (int j = 0; j < 5; j++)
        {
            cout << endl << "Оценка: ";
            cin >> M[i].score[j];
        }

    }
}

void Show(STUDENT* M, int N)
{

    cout << endl << endl << endl << "///////////////////////////////////////////////////////////////////////////" << endl << endl;

    for (int i = 1; i < N; i++)
    {
        for (int j = i; j > 0 && M[j - 1].num > M[j].num; j--)
            swap(M[j - 1], M[j]);
    }

    bool not_found = true;

    for (int i = 0; i < N; i++)
    {
        double S;
        S = (M[i].score[0] + M[i].score[1] + M[i].score[2] + M[i].score[3] + M[i].score[4]) / 5;

        if (S > 4.0)
        {
            cout << endl << "________________________" << endl;
            cout << "Имя: " << M[i].name << endl;
            cout << "Номер группы: " << M[i].num << endl;
            cout << "Средння оценка: " << S << endl;
            not_found = false;
        }
    }
    if (not_found)
    {
        cout << "Таких студентов нет :(";
    }
}

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int N;
    cout << "Сколько учеников: ";
    cin >> N;
    STUDENT* M = new STUDENT[N];


    GetData(M, N);
    Show(M, N);

    return 0;
}

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.