Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2013, 20:32   #1
Avanbars
 
Регистрация: 03.01.2013
Сообщений: 8
По умолчанию непонятные ошибки в коде

Всем привет! Задание следующее
Разработать программу для создания и работы с двусвязным списком, состоящим из структур. Для работы со списком создать меню со следующими пунктами:

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 выводит следующие ошибки, как их исправить и в чем суть ошибок?
Изображения
Тип файла: png Ashampoo_Snap_2013.02.05_19h22m06s_001_.png (17.9 Кб, 63 просмотров)
Тип файла: png Ashampoo_Snap_2013.02.05_19h22m35s_002_.png (19.1 Кб, 64 просмотров)
Avanbars вне форума Ответить с цитированием
Старый 05.02.2013, 21:04   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Что-то знакомое!!!!!!!!!!

Кстати динамически память на Си выделяется разве не функцией malloc() - сразу что в глаза бросается и не забудьте ее освободить free()
Я как-то делал именно это задание (те же элементы в структуре, только условие удаления другое)!
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Stilet; 05.02.2013 в 23:54.
Bugrimov вне форума Ответить с цитированием
Старый 05.02.2013, 23:13   #3
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Есть подозрение, что у Вас компилятор работает в режиме pure C, а не C++. В C ключевое слово struct не объявляет имени типа. То есть, тогда в 10 строке должно быть
Код:
struct spisok* next;
Ну, и везде дальше по тексту тоже.
Abstraction вне форума Ответить с цитированием
Старый 06.02.2013, 07:32   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Код:
typedef struct spis spisok;

struct spis
{
   char nazvanie[20];
   int   cena;
   int   kolichestvo;
   spisok* next;
   spisok* prev;
 };
Можно вот так решить проблему.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 06.02.2013, 08:40   #5
Avanbars
 
Регистрация: 03.01.2013
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Код:
typedef struct spis spisok;

struct spis
{
   char nazvanie[20];
   int   cena;
   int   kolichestvo;
   spisok* next;
   spisok* prev;
 };
Можно вот так решить проблему.
Сделал так как вы написали

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>

typedef struct spis spisok;

struct spis
{
   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 все равно продолжает ругаться:

Avanbars вне форума Ответить с цитированием
Старый 06.02.2013, 10:31   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

первый отбвет перечитайте.

вы или пишите на С, или создайте проект с языком С++
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.02.2013, 10:41   #7
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
Хорошо

Код:
#include <stdlib.h>

first = (spisok*)malloc(sizeof(spisok));
/* Проверка - выделена ли память */
if(first == NULL)
{
	printf("Error memory!");
	exit(1);
}
/* Освобождение памяти после ее использования */
free(first);
Думаю так будет более понятно.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибки в коде C++ BloodWolf Помощь студентам 3 28.11.2012 15:39
Непонятные ошибки в программе на C++ asv1994 Помощь студентам 8 28.10.2012 17:55
Проблема Билдер выкидает непонятные ошибки MrHitori C++ Builder 4 02.08.2012 23:58
Непонятные ошибки monro86 Visual C++ 2 05.04.2012 00:44
непонятные ошибки rapuhabass Общие вопросы C/C++ 3 20.05.2010 06:30