Добавление в конец списка новой структуры - C (СИ)

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

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

Всем привет! Задание следующее Разработать программу для создания и работы с двусвязным списком, состоящим из структур. Для работы со списком создать меню со следующими пунктами: 1. Создание списка. 2. Просмотр списка. 3. Добавление в конец списка новой структуры. 4. Корректировка списка. 5. Выход. Пункт “корректировка списка” выполнить согласно своему варианту задания. Структура содержит название, цену, количество товара. Удалить из списка партии товара, превышающие заданную стоимость.
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
struct spisok
 {
   char nazvanie[20];
   int   cena;
   int   kolichestvo;
   spisok* next;
   spisok* prev;
 };
 
void input (spisok* head);
void print (spisok* head);
void app (spisok* head);
void edit (spisok* head);
int main ()
{
    char b;
    spisok* first = new spisok;
        while (1)
    {
      puts ("\n1-sozdanie spiska");
      puts ("2-view spisok");
      puts ("3-add element to the spisok");
      puts ("4-edit spisok");
      puts ("5-exit");
      b=getch ();
 
      switch (b)
      {
        case '1': input(first); break;
        case '2': print(first); break;
        case '3': app(first); break;
        case '4': edit(first); break;
        case '5': return 0;
        default: puts ("bad rejim");
      }
   }
   return 0;
}
 
void input (spisok* head)
{
        FILE*c;
        spisok*  tek,*k;
    head->prev = NULL;
    head->next = NULL;
    tek = head;
    char ch;
    c=fopen("price.dat","w");
    if(!c)
    {
      puts("Error of Input Text File!");
    }
    printf ("\nEnter the information about tovar\n");
    do
    {
          tek->next = new spisok;
          k=tek;
          tek = tek->next;
      printf ("\nnazvanie:"); 
      scanf ("%s",&tek->nazvanie);
      printf ("cena:"); 
      scanf ("%i",&tek->cena);
      printf ("kolichestvo:"); 
      scanf ("%i",&tek->kolichestvo);
          tek->prev=k;
          tek->next=NULL;
      printf ("\nfinish? y/n");
      ch=getch ();
    } 
        while (ch!='y');
        k=head->next;
        do
        {
                fprintf(c,k->nazvanie,k->cena, k->kolichestvo);
                k=k->next;
        }
        while(k!=NULL);
    fclose (c);
}
//-------------------
void print (spisok* head)
{
//      FILE*c;
        spisok*  tek;
        tek = head->next;
        do
        {
      printf ("\n%s\ncena: %i\nkolichestvo: %i",tek->nazvanie,tek->cena,tek->kolichestvo);
          tek = tek->next;
    }
        while (tek!=NULL);
    
    getch ();
}
 
//------------
void app (spisok* head)
{
        FILE*c;
        spisok* tek,*k;
        char ch;
    c=fopen ("price.dat","w");
        tek=head->next;
 
        while (tek->next!=NULL)
    {
          tek = tek->next;
    }
 
    printf ("\nAdd the information about tovar\n");
    do
    {
          tek->next = new spisok;
          k=tek;
          tek = tek->next;
      printf ("\nnazvanie:"); 
      scanf ("%s",&tek->nazvanie);
      printf ("cena:"); 
      scanf ("%i",&tek->cena);
      printf ("kolichestvo:"); 
      scanf ("%i",&tek->kolichestvo);
          tek->next=NULL;
          tek->prev=k;
 //     fprintf(c,tek->nazvanie,tek->cena, tek->kolichestvo);
      printf ("\nfinish? y/n");
      ch=getch ();
    } 
        while (ch!='y');
    
fclose(c);
}
 
void edit (spisok* head)
{
//   FILE*c;
        spisok *tek,*k;
//      char ch;
        tek=head->next;
        int limit= -999999;
        printf ("\nVvedite verxnij predel stoimosti tovara: \n");
        scanf("%i",&limit);
    do
    {
                if(tek->cena>limit)
                {
                        k=tek->next;
                        k->prev=tek->prev;
                        (tek->prev)->next=k;
                        delete tek;
                        tek=k;
                }
                tek=tek->next;
    } 
        while (tek!=NULL);
}
Проблема заключается в том что программа Code blocks выводит следующие ошибки, как их исправить и в чем суть ошибок?

Решение задачи: «Добавление в конец списка новой структуры»

textual
Листинг программы
typedef struct mysp {
    char nazvanie[20];
    int   cena;
    int   kol;
    struct mysp* next;
    struct mysp* prev;
} spisok;

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

В представленном коде объявлена структура данных под названием mysp с полями:

  1. nazvanie типа char с длиной в 20 символов.
  2. cena типа int.
  3. kol типа int.
  4. next типа struct mysp*.
  5. prev типа struct mysp*. Данная структура используется для создания списка. Указатели next и prev используются для связи элементов списка между собой. Также в коде предусмотрена функция add_spisok, которая добавляет новую структуру mysp в конец списка. Однако, поскольку представлен только объявление структуры и функции, без ее реализации, то нельзя сказать как именно работает данная функция add_spisok.

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

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