Динамическая память и структуры - C (СИ)

Узнай цену своей работы

Формулировка задачи:

не получается считать данные из stdin есть структура:
typedef struct
{       char name[M];
        int grade[K];
} student;
есть функция создания нового элемента массива типа sudent:
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; 
}
n - количество записей в массиве ошибка вылетает при попытке считать строку из stdin в q[n].name если есть у кого соображения подскажите, а то уже пол дня убил)

Решение задачи: «Динамическая память и структуры»

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; 
}

Объяснение кода листинга программы

  1. Функция add_item принимает два аргумента: указатель на структуру student и целое число n.
  2. Внутри функции происходит выделение памяти под новый элемент структуры student с помощью функции realloc. Выделенная память будет использоваться для хранения информации о студенте.
  3. Если выделение памяти не удалось (т.е. realloc вернул NULL), то функция выводит сообщение об ошибке и возвращает n.
  4. Если выделение памяти прошло успешно, то указатель p перенаправляется на новый блок памяти, чтобы старый указатель не указывал на уже освобожденную память.
  5. Затем пользователю предлагается ввести имя и оценки студента.
  6. Используя функцию fscanf, вводятся данные о студенте: имя и оценки.
  7. После успешного ввода данных функция возвращает n+1, увеличивая счетчик студентов на единицу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5
Похожие ответы