Динамическая память и структуры - C (СИ)
Формулировка задачи:
не получается считать данные из stdin
есть структура:
есть функция создания нового элемента массива типа sudent:
n - количество записей в массиве
ошибка вылетает при попытке считать строку из stdin в q[n].name
если есть у кого соображения подскажите, а то уже пол дня убил)
typedef struct { char name[M]; int grade[K]; } student;
int add_item (student *p, int n) { student *q=NULL; q = (student *) realloc (p,(n+1)*sizeof(student)); if (q = NULL) { printf("Невозможно выделить память\n"); system("pause"); return n; } p=q; printf("Enter last name and grades\n"); fscanf(stdin,"%s",q[n].name); fflush(); return n+1; }
Решение задачи: «Динамическая память и структуры»
textual
Листинг программы
int add_item (student *p, int n) { student *q = (student *) realloc (p,(n+1)*sizeof(student)); if (q = NULL) { printf("Невозможно выделить память\n"); return n; } p=q; printf("Enter last name and grades\n"); fscanf(stdin,"LastName - %s", q->name); fscanf(stdin, "grade1 = %d", &q->grade[0]); fscanf(stdin, "grade2 = %d", &q->grade[1]); fscanf(stdin, "grade2 = %d", &q->grade[2]); return n+1; }
Объяснение кода листинга программы
- Функция
add_item
принимает два аргумента: указатель на структуруstudent
и целое числоn
. - Внутри функции происходит выделение памяти под новый элемент структуры
student
с помощью функцииrealloc
. Выделенная память будет использоваться для хранения информации о студенте. - Если выделение памяти не удалось (т.е.
realloc
вернулNULL
), то функция выводит сообщение об ошибке и возвращаетn
. - Если выделение памяти прошло успешно, то указатель
p
перенаправляется на новый блок памяти, чтобы старый указатель не указывал на уже освобожденную память. - Затем пользователю предлагается ввести имя и оценки студента.
- Используя функцию
fscanf
, вводятся данные о студенте: имя и оценки. - После успешного ввода данных функция возвращает
n+1
, увеличивая счетчик студентов на единицу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д