Форум программистов, компьютерный форум CyberForum.ru

Найти ошибку - после работы функции addStudent, оценки старых студентов не присваиваются новому массиву - C++

Восстановить пароль Регистрация
 
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
28.04.2014, 15:45     Найти ошибку - после работы функции addStudent, оценки старых студентов не присваиваются новому массиву #1
Помогите найти ошибку. После работы функции addStudent, оценки старых студентов не присваиваются новому массиву.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
struct student{
    char *fullname;
    char *group;
    int *evaluation; //Оценки, где student[I].evaluation[j] - оценка
    int *arr_ev; //Массив с количеством оценок, где arr_ev[I] кол-во оценок [I] студента 
    float rating;
};
void addEvaluation(student *st, int count,int start, int finish){ //Добавление оценок
    system("cls");
    st->arr_ev = new int[count];
    for (int i = start; i < finish; i++){
        cout << "Студент №" << i + 1 << endl;
        cout << "Введите кол-во добавляемых оценок: ";
        cin >> st->arr_ev[i];
        cin.ignore(1);
        st[i].evaluation = new int[st->arr_ev[i]];
        for (int j = 0; j < st->arr_ev[i]; j++)
            st[i].evaluation[j]=rand()%11+1;
        cout << endl;
    }
    studentRating(st, count, start, finish);
}
void addStudent(student *&st, int &count){ //Добавление студентов
    system("cls");
    cout << "Введите необходимое кол-во студентов: ";
    int n;
    cin >> n;
    cin.ignore(1);
    if (n <= 0){
        cout << "Невозможно добавить 0 или меньше элементов\nПовторите ввод\n";
    }
    else{
        /*1*/ //Добавление в конец 
        int newcount = count + n;
        student *temp = new student[newcount];
        temp->arr_ev = new int[newcount];
        for (int i = 0; i < count; i++){
            temp[i] = st[i]; 
            temp->arr_ev[i] = st->arr_ev[i]; //Возможно, здесь неправильно
            temp[i].evaluation = new int[temp->arr_ev[i]];
            for (int j = 0; j < st->arr_ev[i]; j++){
                temp[i].evaluation[j] = st[i].evaluation[j];
            }
        }
        fillingStudent(temp,count,count,newcount); //Заполнение char элементов структуры
        addEvaluation(temp,count,count,newcount);
        delete[]st;
        st = temp;
        count = newcount;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2014, 15:45     Найти ошибку - после работы функции addStudent, оценки старых студентов не присваиваются новому массиву
Посмотрите здесь:

не могу найти ошибку в поиске по массиву структур C++
C++ В журнале записаны оценки n студентов, сдававших m экзаменов
C++ Список студентов: возможность вводить оценки, изменять, удалять
C++ Составить программу для вычисления среднего балла студентов, если количество студентов и оценки вводятся с клавиатуры.
C++ Ошибка в коде: массиву присваиваются пробелы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alekopoko
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
28.04.2014, 15:57     Найти ошибку - после работы функции addStudent, оценки старых студентов не присваиваются новому массиву #2
покажи весь код
я про определение других функций - fillingStudent и т.д.
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
28.04.2014, 15:59  [ТС]     Найти ошибку - после работы функции addStudent, оценки старых студентов не присваиваются новому массиву #3
alekopoko,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <windows.h>
#include <iomanip>
#include <conio.h>
#include <string.h>
#include <time.h>
using namespace std;
struct student{
    char *fullname;
    char *group;
    int *evaluation;
    int *arr_ev;
    float rating;
};
void getss(char *&str){
    char temp[80];
    gets(temp);
    str = new char[strlen(temp) + 1];
    strcpy(str, temp);
}
void fillingStudent(student *st, int count, int start,int finish){
    for (int i = start; i < finish; i++){
        cout << endl;
        cout << "Студент №" << i + 1 << endl;
        cout << "Введите полное имя студента: ";
        getss(st[i].fullname);
        cout << "Введите группу студента: ";
        getss(st[i].group);
    }
    cout << endl;
}
void createStudent(student *&st, int &count){ //Создание студентов
    system("cls");
    cout << "Введите кол-во студентов: ";
    cin >> count;
    cin.ignore(1);
    st = new student[count];
    fillingStudent(st,count,0,count);
}
void printStudent(student *st, int count, int from, int to){ //Вывод студентов
    //system("cls");
    for (int i = from; i < to; i++){
        cout << "| Cтудент №" << i + 1
            << " || Полное имя: " << st[i].fullname
            << " || Группа: " << st[i].group
            << " || Rating: " << st[i].rating
            << " |" << endl;
        cout << endl;
    }
    //do{
    //  cout << "Для продолжения нажмите любую клавишу...";
    //} while (!_getch());
}
void studentRating(student *st, int count, int start, int finish){ //Определение рейтинга студента
    for (int i = start; i < finish; i++){
        float temp = 0;
        for (int j = 0; j < st->arr_ev[i]; j++){
            temp += st[i].evaluation[j];
        }
        st[i].rating = temp / st->arr_ev[i];
    }
}
void addEvaluation(student *st, int count,int start, int finish){ //Добавление оценок
    system("cls");
    st->arr_ev = new int[count];
    for (int i = start; i < finish; i++){
        cout << "Студент №" << i + 1 << endl;
        cout << "Введите кол-во добавляемых оценок: ";
        cin >> st->arr_ev[i];
        cin.ignore(1);
        st[i].evaluation = new int[st->arr_ev[i]];
        for (int j = 0; j < st->arr_ev[i]; j++)
            st[i].evaluation[j]=rand()%11+1;
        cout << endl;
    }
    studentRating(st, count, start, finish);
}
void printEvaluation(student *st, int count){ //Вывод оценок
    system("cls");
    for (int i = 0; i < count; i++){
        cout << "Студент №" << i + 1 << endl;
        for (int j = 0; j < st->arr_ev[i]; j++){
            cout << st[i].evaluation[j] << " ";
        }
        cout << endl;
    }
    do{
        cout << "Для продолжения нажмите любую клавишу...";
    } while (!_getch());
}
void addStudent(student *&st, int &count){
    system("cls");
    cout << "Введите необходимое кол-во студентов: ";
    int n;
    cin >> n;
    cin.ignore(1);
    if (n <= 0){
        cout << "Невозможно добавить 0 или меньше элементов\nПовторите ввод\n";
    }
    else{
        /*1*/ //Добавление в конец 
        int newcount = count + n;
        student *temp = new student[newcount];
 
        temp->arr_ev = new int[newcount];
        for (int i = 0; i < count; i++){
            temp[i] = st[i];
            temp->arr_ev[i] = st->arr_ev[i];
            temp[i].evaluation = new int[temp->arr_ev[i]];
            for (int j = 0; j < st->arr_ev[i]; j++){
                temp[i].evaluation[j] = st[i].evaluation[j];
            }
        }
        fillingStudent(temp,count,count,newcount);
        addEvaluation(temp,count,count,newcount);
        delete[]st;
        st = temp;
        count = newcount;
    }
}       
void searchStudent(student *st, int count){// Поиск по 
    //Добавить по имени, рейтингу
    system("cls");
    cout << "Введите название группы: ";
    char *str;
    getss(str);
    for (int i = 0; i < count; i++){
        int result;
        result = _stricmp(st[i].group, str);
        if ( result == 0){
            printStudent(st, count, i, i + 1);
        }
    }
    delete[]str;
}
void DrawMenu(char **menu, int lengthMenu, int punkt)//Вывод меню для управления
{
    system("cls");
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    for (int i = 0; i < lengthMenu; i++)
    {
        if (i == punkt - 1)
            SetConsoleTextAttribute(hStdOut, BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);
        cout << menu[i] << endl;
        if (i == punkt - 1)
            SetConsoleTextAttribute(hStdOut, 15);
    }
}
int ConsoleMenu(char **menu, int lengthMenu){//Управление меню кнопками "вниз" и " "вверх"
    int punkt = 1;
    DrawMenu(menu, lengthMenu, punkt);
    while (1)
    {
        int j = _getch();
        if (j == 72) punkt--;
        if (j == 80) punkt++;
        if (punkt<1) punkt = lengthMenu;
        if (punkt>lengthMenu) punkt = 1;
        if (j == 13) return punkt;
        if (j == 72 || j == 80)DrawMenu(menu, lengthMenu, punkt);
    }
}
 
int main(void){
    srand(time(NULL));
    setlocale(LC_ALL, "Russian");
    student *stptr;
    int n = 0;
    createStudent(stptr, n);
    addEvaluation(stptr, n,0,n);
    //searchStudent(stptr, n);
    printStudent(stptr, n,0,n);
    printEvaluation(stptr, n);
    addStudent(stptr,n);
    //printStudent(stptr, n,0,n);
    printEvaluation(stptr, n);
    exit(0);
}
Прошу не судить строго
alekopoko
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
28.04.2014, 16:09     Найти ошибку - после работы функции addStudent, оценки старых студентов не присваиваются новому массиву #4
задача программы какая?что должна реализовать?
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
28.04.2014, 18:33  [ТС]     Найти ошибку - после работы функции addStudent, оценки старых студентов не присваиваются новому массиву #5
alekopoko, Создание(имя, группа, оценки, рейтинг),вывод на экран(информацию о студенте, оценки), удаление(из любого места, по критериям(имя, группа, рейтинг)), добавление, сортировка(по имени, по группе, по рейтингу),поиск студента(по имени, по группе, по рейтингу), запись в файл(бинарный),чтение из файла,реализовать меню. Каждый элемент структуры должен быть указателем, без ООП.

Добавлено через 2 часа 17 минут
Пожалуйста укажите почему неправильно работает программа. UP!
alekopoko
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
28.04.2014, 19:00     Найти ошибку - после работы функции addStudent, оценки старых студентов не присваиваются новому массиву #6
ну вот смотри.
зачем усложнил addEvaluation и studentRating ,добавил какой-то указатель arr_ev ?

например addEvaluation :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void addEvaluation(student *st, int count,int start, int finish){ //Добавление оценок
    system("cls");
    for (int i = start; i < finish; i++){
        cout << "Студент №" << i + 1 << endl;
        cout << "Введите кол-во добавляемых оценок: ";
        int n=0;
        cin >> n;
        cin.ignore(1);
        st[i].evaluation = new int[n];
        for (int j = 0; j < n; j++)
        {
            st[i].evaluation[j]=rand()%11+1;
        }
        cout << endl;
    }
    studentRating(st, count, start, finish,n);
}
почему бы так не сделать? ну да, надо подредактировать studentRating,ну и функции вывода этих данных ,Но зато нету указателя arr_ev а значит меньше головной боли

Добавлено через 24 минуты
смотри что я имею в виду.
указатель твоей структуры stptr
наглядно покажу через Си
твой указатель arr_ev взаимодействовал с этой структурой да?
чтобы вывести все поля stptr в main, так или иначе мне бы пришлось данные оценок и рейтингов выводить через arr_ev Я убрал его и весь вывод полей структуры стал легче.

данный пример - вывод одного элемента структуры т.е. strptr[0]; с количеством оценок - 2
C
1
2
3
4
    printf("%s %s ",*stptr);
    for(int i=0;i<=1;i++)
    printf("-%d-",*stptr->evaluation++); 
    printf("=%f",stptr->rating);
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
28.04.2014, 22:51  [ТС]     Найти ошибку - после работы функции addStudent, оценки старых студентов не присваиваются новому массиву #7
alekopoko, С *arr_ev создается динамический массив, а сам этот указатель является частью структуры. Каждый элемент этого массива является количеством оценок для студента. Количество оценок не должно быть фиксированным числом. Если бы Вы скомпилировал мой код, то наглядно увидели в чем проблема.
alekopoko
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
29.04.2014, 01:06     Найти ошибку - после работы функции addStudent, оценки старых студентов не присваиваются новому массиву #8
NikiKoyot,

Добавлено через 3 минуты
переменная count(2 параметр) для fillingStudent зачем?)

Добавлено через 32 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void printEvaluation(student *st, int count){ //Вывод оценок
    system("cls");
    for (int i = 0; i < count; i++){
        cout << "Студент №" << i + 1 << endl;
        for (int j = 0; j < count; j++){
            cout << st[i].evaluation[j] << " ";
        }
        cout << endl;
    }
    do{
        cout << "Для продолжения нажмите любую клавишу...";
    } while (!_getch());
}
так вроде выводится
for (int j = 0; j < count; j++){
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
29.04.2014, 01:14  [ТС]     Найти ошибку - после работы функции addStudent, оценки старых студентов не присваиваются новому массиву #9
alekopoko, Спасибо за помощь, но вы мне ничем не помогли. Я уже сам разобрался. Проблема заключается в функции addStudent
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void addEvaluation(student *st, int count, int start, int finish){ //Добавление оценок
    if (successfullyCreated == false)
        return;
    system("cls");
    st->arr_ev = new int[count];  //ВОТ ТУТ Я СОЗДАЮ ЗАНОВО МАССИВ, ХОТЯ ЭТО НЕ В МОИХ ИНТЕРЕСАХ
    for (int i = start; i < finish; i++){
        cout << "Студент №" << i + 1 << endl;
        cout << "Введите кол-во добавляемых оценок: ";
        cin >> st->arr_ev[i];
        cin.ignore(1);
        st[i].evaluation = new int[st->arr_ev[i]];
        for (int j = 0; j < st->arr_ev[i]; j++)
            st[i].evaluation[j] = rand() % 11 + 1;
        cout << endl;
    }
    studentRating(st, count, start, finish);
}
Нужно переделать эту функцию, чтобы она работала и со старым массивом, либо создать новую функцию
alekopoko
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
29.04.2014, 01:25     Найти ошибку - после работы функции addStudent, оценки старых студентов не присваиваются новому массиву #10
после второго захода в addEvaluation у тебя теряются данные [st->arr_ev[0]];
сл-но printEvaluation в первый шаг цикла(i=0) в цикл c j не разу не заходит
это пример когда сначала создаем одного и потом добавляем одного
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
29.04.2014, 01:31  [ТС]     Найти ошибку - после работы функции addStudent, оценки старых студентов не присваиваются новому массиву #11
alekopoko, Успокойтесь, я же Вам сказал, что и без Вас справился.
alekopoko
1 / 1 / 1
Регистрация: 28.04.2014
Сообщений: 33
29.04.2014, 01:45     Найти ошибку - после работы функции addStudent, оценки старых студентов не присваиваются новому массиву #12
после вызова addEvaluation переприсваиваются старые данные [st->arr_ev[i]]; на новые
я так это понял .)

Добавлено через 6 минут
NikiKoyot, так что ты конкретно исправил у себя в программе? я что-то не вижу) addEvaluation и addStudent так и остались без изменений(или я что-то просмотрел) . Мне самому стало интересно, как надо правильно)
Успокойтесь, я же Вам сказал, что и без Вас справился.
да я спокоен) я нормальный) меня просто это программа заинтересовала)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2014, 01:57     Найти ошибку - после работы функции addStudent, оценки старых студентов не присваиваются новому массиву
Еще ссылки по теме:

C++ Функции работы с файлами через поток не работают! Подскажите ошибку?
Вывести список студентов, имеющих положительные оценки C++
C++ Вывести из файла фамилии студентов и оценки по заданному предмету

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
29.04.2014, 01:57  [ТС]     Найти ошибку - после работы функции addStudent, оценки старых студентов не присваиваются новому массиву #13
alekopoko,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <windows.h>
#include <iomanip>
#include <conio.h>
#include <string.h>
#include <time.h>
using namespace std;
struct student{
    char *fullname;
    char *group;
    int *evaluation;
    int *arr_ev;
    float rating;
};
bool successfullyCreated = false;
void DrawMenu(char **menu, int lengthMenu, int punkt)//Вывод меню для управления
{
    system("cls");
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    for (int i = 0; i < lengthMenu; i++)
    {
        if (i == punkt - 1)
            SetConsoleTextAttribute(hStdOut, BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);
        cout << menu[i] << endl;
        if (i == punkt - 1)
            SetConsoleTextAttribute(hStdOut, 15);
    }
}
int ConsoleMenu(char **menu, int lengthMenu){//Управление меню кнопками "вниз" и " "вверх"
    int punkt = 1;
    DrawMenu(menu, lengthMenu, punkt);
    while (1)
    {
        int j = _getch();
        if (j == 72) punkt--;
        if (j == 80) punkt++;
        if (punkt<1) punkt = lengthMenu;
        if (punkt>lengthMenu) punkt = 1;
        if (j == 13) return punkt;
        if (j == 72 || j == 80)DrawMenu(menu, lengthMenu, punkt);
    }
}
void getss(char *&str){
    char temp[80];
    gets(temp);
    str = new char[strlen(temp) + 1];
    strcpy(str, temp);
}
void fillingStudent(student *st, int count, int start, int finish){
    for (int i = start; i < finish; i++){
        cout << endl;
        cout << "Студент №" << i + 1 << endl;
        cout << "Введите полное имя студента: ";
        getss(st[i].fullname);
        cout << "Введите группу студента: ";
        getss(st[i].group);
    }
    cout << endl;
}
void createStudent(student *&st, int &count){ //Создание студентов
    if (successfullyCreated != false)
        return;
        system("cls");
        cout << "Введите кол-во студентов: ";
        cin >> count;
        cin.ignore(1);
        st = new student[count];
        successfullyCreated = true;
}
void printStudent(student *st, int count, int from, int to){ //Вывод студентов
    if (successfullyCreated == false)
        return;
    system("cls");
    for (int i = from; i < to; i++){
        cout << "| Cтудент №" << i + 1
            << " || Полное имя: " << st[i].fullname
            << " || Группа: " << st[i].group
            << " || Rating: " << st[i].rating
            << " |" << endl;
        cout << endl;
    }
    do{
        cout << "Для продолжения нажмите любую клавишу...";
    } while (!_getch());
}
void studentRating(student *st, int count, int start, int finish){ //Определение рейтинга студента
    if (successfullyCreated == false)
        return;
    for (int i = start; i < finish; i++){
        float temp = 0;
        for (int j = 0; j < st->arr_ev[i]; j++){
            temp += st[i].evaluation[j];
        }
        st[i].rating = temp / st->arr_ev[i];
    }
}
void addEvaluation(student *st, int count, int start, int finish){ //Добавление оценок
    if (successfullyCreated == false)
        return;
    system("cls");
    st->arr_ev = new int[count];
    for (int i = start; i < finish; i++){
        cout << "Студент №" << i + 1 << endl;
        cout << "Введите кол-во добавляемых оценок: ";
        cin >> st->arr_ev[i];
        cin.ignore(1);
        st[i].evaluation = new int[st->arr_ev[i]];
        for (int j = 0; j < st->arr_ev[i]; j++)
            st[i].evaluation[j] = rand() % 11 + 1;
        cout << endl;
    }
    studentRating(st, count, start, finish);
}
void printEvaluation(student *st, int count){ //Вывод оценок
    if (successfullyCreated == false)
        return;
    system("cls");
    for (int i = 0; i < count; i++){
        cout << "Студент №" << i + 1 << " | " << st[i].fullname << " | " << st[i].group << endl;
        for (int j = 0; j < st->arr_ev[i]; j++){
            cout << st[i].evaluation[j] << " ";
        }
        cout << endl;
    }
    do{
        cout << "Для продолжения нажмите любую клавишу...";
    } while (!_getch());
}
void addOldEvaluation(student *st, int count, int start, int finish){
    for (int i = start; i < finish; i++){
        cout << "Студент №" << i + 1 << endl;
        cout << "Введите кол-во добавляемых оценок: ";
        cin >> st->arr_ev[i];
        cin.ignore(1);
        st[i].evaluation = new int[st->arr_ev[i]];
        for (int j = 0; j < st->arr_ev[i]; j++)
            st[i].evaluation[j] = rand() % 11 + 1;
        cout << endl;
    }
    studentRating(st, count, start, finish);
}
void addStudent(student *&st, int &count){
    if (successfullyCreated == false)
        return;
    system("cls");
    cout << "Введите необходимое кол-во студентов: ";
    int n;
    cin >> n;
    cin.ignore(1);
    if (n <= 0){
        cout << "Невозможно добавить 0 или меньше элементов\nПовторите ввод\n";
    }
    else{
        /*1*/ //Добавление в конец 
        int newcount = count + n;
        student *temp = new student[newcount];
        temp->arr_ev = new int[newcount];
        for (int i = 0; i < count; i++){
            temp[i].fullname = st[i].fullname;
            temp[i].group = st[i].group;
            temp[i].rating = st[i].rating;
            temp->arr_ev[i] = st->arr_ev[i];
            temp[i].evaluation = new int[temp->arr_ev[i]];
            for (int j = 0; j < temp->arr_ev[i]; j++){
                temp[i].evaluation[j] = st[i].evaluation[j];
            }
        }
        fillingStudent(temp, newcount, count, newcount);
        addOldEvaluation(temp, newcount, count, newcount);
        delete[]st;
        st = temp;
        count = newcount;
    }
}
void searchStudent(student *st, int count){// Поиск по 
    if (successfullyCreated == false)
        return;
    system("cls");
    char*menuptr[5] = { "1. По имени", "2. По группе", "3. По рейтингу","4. По номеру", "5. В меню" };
    int n;
    do{
        n = ConsoleMenu(menuptr, 5);
    } while (n != 5);
    if (n == 5) return;
    switch (n){
    case 1: cout << "\nВведите имя студента: "; break;
    case 2: cout << "\nВведите название группы: "; break;
    case 3: cout << "\nВведите рейтинг искаемого(-их) студентов"; break;
    case 4: cout << "\nВведите порядковый номер студента(-ов) "; break;
    }
    char *str;
    getss(str);
    for (int i = 0; i < count; i++){
        int result;
        result = _stricmp(st[i].group, str);
        if (result == 0){
            printStudent(st, count, i, i + 1);
        }
    }
    delete[]str;
    do{
        cout << "Для продолжения нажмите любую клавишу...";
    } while (!_getch());
}
void Menu(student *&st, int count){
    system("cls");
    char*menuptr[9] = { "1. Создать",
        "2. Изменение информации о студенте",
        "3. Вывести на экран информацию о студенте",
        "4. Управление оценками",
        "5. Вывести на экран оценки студента",
        "6. Добавление студента",
        "7. Сортировка",
        "8. Поиск по",
        "9. Выход" };
    int n;
    do{
        n = ConsoleMenu(menuptr, 9);
        if (n != 9){
            if (n == 1){ createStudent(st, count); }
            if (n == 2){ fillingStudent(st, count, 0, count); }
            if (n == 3){ printStudent(st, count, 0, count); }
            if (n == 4){ addEvaluation(st, count,0,count); }
            if (n == 5){ printEvaluation(st, count); }
            if (n == 6){ addStudent(st, count); }
            //if (n == 7){}
            if (n == 8){ searchStudent(st, count); }
        }
    } while (n != 9);
    if (n == 9){ exit(0); }
}
int main(void){
    srand(time(NULL));
    setlocale(LC_ALL, "Russian");
    student *stptr;
    int n = 0;
    while (true){
        Menu(stptr, n);
    }
}
Если Вам нужно, я могу скинуть когда полностью сделаю программу.
Yandex
Объявления
29.04.2014, 01:57     Найти ошибку - после работы функции addStudent, оценки старых студентов не присваиваются новому массиву
Ответ Создать тему
Опции темы

Текущее время: 13:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru