getline со структурой указателя массива - PullRequest
1 голос
/ 24 февраля 2012

Мне нужно изучить управление памятью в классе и как динамически распределять память с помощью оператора new.

У меня есть структура, которая

struct Course
{
    int courseNumber, creditHours;
    string courseName;
    char grade;
};

Я пытаюсь заполнить переменные-члены циклом for, но я не уверен, как использовать getline с courseName. Я смог использовать обычный cin, но он не будет работать, если в имени класса есть пробелы.

Ниже мой код и то, что я пробовал, но я получаю сообщение об ошибке, что courseArray не определено.

Course* readCourseArray(int &courses)                           //Read Courses
{
    cout<<"\nHow many courses is the student taking?\n";
    cin>>courses;
    const int *sizePTR = &courses;
    Course *coursePTR = new Course[*sizePTR]; 

    for(int count = 0; count < *sizePTR; count++)  //Enter course information
    {
        cout<<"\nEnter student "<<count+1<<"'s course name\n";
        getline(cin,courseArray[count].courseName);
        cout<<"\nEnter student "<<count+1<<"'s course number\n";
        cin>>coursePTR[count].courseNumber;
        cout<<"\nEnter student "<<count+1<<"'s credit hours\n";
        cin>>coursePTR[count].creditHours;
        cout<<"\nEnter student "<<count+1<<"'s grade\n";
        cin>>coursePTR[count].grade;
    }


    return coursePTR;
}

1 Ответ

3 голосов
/ 24 февраля 2012

Указатель на ваш массив называется coursePTR, а не courseArray. Просто замените имя courseArray на coursePTR.

Для этой строки:

const int *sizePTR = &courses;

Вам не нужно этого делать, вы можете просто использовать courses напрямую (поэтому удалите все * из мест, которые вы используете sizePTR, затем измените sizePTR на courses).

Также я надеюсь, что вы помните delete[] возвращаемое значение readCourseArray :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...