Ошибка при записи ключа и строки в AddNode - C (СИ)

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

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

Не могу понять, почему AddNode фэйлится при записи туда ключа и строки. Хочу сделать таблицу, чтобы убирало и добавляло элемент.
#include "stdio.h"
#include "stdlib.h"
 
typedef struct NODE
{
        long long int key;
        char *string;
}Node;
 
typedef struct TABLE
{
        int length;
        Node *node;        
}Table;
 
Table * CreateTable()
{
      Table *res=(Table *)malloc(sizeof(Table));
      res->length=0;
      res->node=NULL;
}
 
void AddNode(Table *res)
{
     long long int key;
     printf("Type your key:\n");
     scanf("%d",&key);
     getchar();
     printf("Type your string:\n");
     char *string=(char *)malloc(sizeof(char)*100);
     gets(string);
     res->node=realloc(res->node,sizeof(Node));
     res->length++;
     res->node[res->length-1].key=key;
     res->node[res->length-1].string=string;
     return;
}
 
void PrintTable(Table *res)
{
     int i;
     for(i=0;i< res->length ;i++)
     {
           printf("%ld -> %s\n",res->node[i].key,res->node[i].string);
     }
}

Решение задачи: «Ошибка при записи ключа и строки в AddNode»

textual
Листинг программы
#include "stdio.h"
#include "stdlib.h"
 
typedef struct NODE
{
        long long int key;
        char *string;
}Node;
 
typedef struct TABLE
{
        int length;
        Node *node;        
}Table;
 
Table * CreateTable()
{
      Table *res=(Table *)malloc(sizeof(Table));
      res->length=0;
      res->node=NULL;
}
 
 
void AddNode(Table *res)
{
     char *string=(char *)malloc(sizeof(char)*100);
     long long int key;
     printf("Type your key:\n");
     scanf("%ld",&key);
     getchar();
     printf("Type your string:\n");
     fgets(string,98,stdin);
     res->node=realloc(res->node,sizeof(Node));
     res->length++;
     res->node[res->length-1].key=key;
     res->node[res->length-1].string=string;
     return;
}
 
void PrintTable(Table *res)
{
     int i;
     for(i=0;i< res->length ;i++)
     {
                printf("%ld -> ",res->node[i].key);
                printf("%s\n",res->node[i].string);
     }
}

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

  1. Код начинается с объявления двух структур: NODE и TABLE. Структура NODE содержит ключ типа long long int и строку типа char *. Структура TABLE содержит переменную типа int для хранения длины таблицы и указатель на первый элемент таблицы типа Node *.
  2. Создается функция CreateTable, которая выделяет память под структуру TABLE и инициализирует ее поля.
  3. Создается функция AddNode, которая добавляет новый узел в таблицу. В этой функции сначала запрашивается ключ и строка, затем выделяется память под новую строку. Затем изменяется указатель на первый элемент таблицы и увеличивается длина таблицы. Новый узел добавляется в таблицу.
  4. Создается функция PrintTable, которая выводит все строки таблицы. В этой функции используется цикл for, который проходит по всем элементам таблицы и выводит ключ и строку каждого элемента.
  5. Код содержит две глобальные переменные: table и node. Эти переменные используются для демонстрации работы функций CreateTable и AddNode.
  6. Код содержит пример использования функций CreateTable и AddNode. Сначала создается таблица, затем добавляются два узла.
  7. Код содержит пример использования функции PrintTable. После вызова этой функции на экран должны быть выведены два узла таблицы.

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


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

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

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