Добавление в конец списка новой структуры - C (СИ)
Формулировка задачи:
Всем привет! Задание следующее
Разработать программу для создания и работы с двусвязным списком, состоящим из структур. Для работы со списком создать меню со следующими пунктами:
1. Создание списка.
2. Просмотр списка.
3. Добавление в конец списка новой структуры.
4. Корректировка списка.
5. Выход.
Пункт “корректировка списка” выполнить согласно своему варианту задания.
Структура содержит название, цену, количество товара. Удалить из списка партии товара, превышающие заданную стоимость.
Проблема заключается в том что программа Code blocks выводит следующие ошибки, как их исправить и в чем суть ошибок?
#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); }
Решение задачи: «Добавление в конец списка новой структуры»
textual
Листинг программы
typedef struct mysp { char nazvanie[20]; int cena; int kol; struct mysp* next; struct mysp* prev; } spisok;
Объяснение кода листинга программы
В представленном коде объявлена структура данных под названием mysp
с полями:
nazvanie
типаchar
с длиной в 20 символов.cena
типаint
.kol
типаint
.next
типаstruct mysp*
.prev
типаstruct mysp*
. Данная структура используется для создания списка. Указателиnext
иprev
используются для связи элементов списка между собой. Также в коде предусмотрена функцияadd_spisok
, которая добавляет новую структуруmysp
в конец списка. Однако, поскольку представлен только объявление структуры и функции, без ее реализации, то нельзя сказать как именно работает данная функцияadd_spisok
.