Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Borlan C] И снова двусвязный список и все что с н 
:(
    Опции темы
BCworm
Дата 11.9.2007, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 23.8.2007

Репутация: нет
Всего: нет



А почему остальные поляне заполняются с помошью gets? Сразу компилятор ругается. а вот если я меняю тип prc и col с int на char вроде бы пашет но на выводе выводится только name 
PM MAIL   Вверх
apook
Дата 11.9.2007, 13:00 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



нормально ты списки изучешь и не знаешь функцию gets значит не знаком со строками и типами данных и что Си различает эти типы! Хоть бы полегче че выбрал для начала, а то списки двусвязные.....      


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
BCworm
Дата 12.9.2007, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 23.8.2007

Репутация: нет
Всего: нет



Да у меня есть достаточно большие пробелы в знаниях, но я стараюсь их исправлять по мере поступдения проблем. Спасибо почитал понял.

Код

printf( "Поле Name: " );
scanf( p->name );
printf( "Поле prc: " );
scanf( "%d",  p->prc  );
printf( "Поле col: " );
scanf( "%d",  p->col  );


Это вроде бы работает. Теперь начсет вывода на экран. У меня вот так

Код

void list(item *p)
{if (p==head)
  while (p != NULL)
    {printf("\n%s %d %d",p->name, p->prc, p->col);
      p=p->next;
    }
   else if (p==tail)
  while ( p!= NULL)
  {puts(p->name);
    p=p->prev;
  }
  else
    puts("Some Error");
    getch();
  }


Теперь заморочка с форматом вывода интов. name то понятно %s а вот prc и col заполнены просто однозначными цифрами и потому я попробовал с форматом %d но отображается некорректно (какие то левые многозначные цифры.
PM MAIL   Вверх
apook
Дата 12.9.2007, 09:12 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



думаю проблема в выделении памяти, но не уверен. Подозрительно выглядит
Код

p=(item *)malloc(sizeof(spis));
что такое spis?


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
BCworm
Дата 12.9.2007, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 23.8.2007

Репутация: нет
Всего: нет



Да это я черновик кода сначало кинул. тап опечатка должно быть item все исправил.
PM MAIL   Вверх
apook
Дата 12.9.2007, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



а это
Цитата

23:   p->v1=pred;

пиши пожашлуйсто правильно, ошибка может быть в любом месте программы, а ее последствия могут сказаться тока в конце, а могут и не сказаться сейчас а сказаться при других условиях! буть внимательней...


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
BCworm
Дата 12.9.2007, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 23.8.2007

Репутация: нет
Всего: нет



Кажется проблема заключается в том что заполнение prc и nom происходит неправильно либо вообще не происходит. Получается что на выводе выводится только name а результат вывода остальных элементов структуры просто мусор.
Правильно ли заполняются элементы структуры? либо неправильна построена функция вывода на экран?

код подправил p->prev

Это сообщение отредактировал(а) BCworm - 12.9.2007, 12:13
PM MAIL   Вверх
apook
Дата 12.9.2007, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Цитата(BCworm @  12.9.2007,  12:10 Найти цитируемый пост)
код подправил p->prev

ты исправил так:     p->prev=pred; а что такое pred

Цитата(BCworm @  12.9.2007,  12:10 Найти цитируемый пост)
Кажется проблема заключается в том что заполнение prc и nom происходит неправильно либо вообще не происходит


такая картиеа может быть если неправильно запронен список(или массив) а такое может быть так-же потому-что неправильно выделена память(ну и еще много причин может быть) или может быть что ты заполняешь слишком большими числами для типа int(какие числа ты вводишь?) Дай нормально код всей программы чтоб можно было разобраться....



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
BCworm
Дата 12.9.2007, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 23.8.2007

Репутация: нет
Всего: нет



Числа простые однозначные как 1 или 2

Пока код вот такой

Код

#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <string.h>
struct item
{char name[20];int prc;int col;
  struct item *prev;
  struct item *next;
};
void build(void); // создание
void view(item *); // просмотр
struct item *head,*tail; // указатели на начало и конец списка
main(){int c;
while (1)
{clrscr();
//тут будет меню
   puts(" 1 - Создать");
   puts(" 2 - Просмотреть");
   puts(" 0 - Выйти");
c=getch();
switch(c)
  {case '1': build(); break;
   case '2': view(); break; //а что сейчас без глюков! Вот тут он и есть ругань компилятора почемуто             
   case '0': return 0;         //грит типа недостаточно параметров для запуска функции view
   default : puts("No No NO");
}
}
}
void build(void)
{item *p,*pr;
  pr=NULL;
  do { p=(item *)malloc(sizeof(item));
    clrscr();
    printf("Name : ");
    scanf("%s",p->name);
    printf("\nPrc : ");
    scanf("%d",p->prc);
    printf("\nCol: ");
    scanf("%d",p->col);
    p->prev=pr;
  if (pr != NULL)
      pr->next=p;
  else
      head=p;
    pr=p;
    printf("\nFinish - <esc>");
}
while (getch()!=27);
  tail=p;
  tail->next=NULL;
}
void view(item *p)
{if (p==head)
  while (p != NULL)
  {printf("\n%s %d %d",p->name, p->prc, p->col);
  p=p->next;
    }
   else if (p==tail)
  while ( p!= NULL)
  {printf("\n%s %d %d",p->name, p->prc, p->col);
    p=p->prev;
  }
  else
    puts("Неверный адрес ");
    getch();
  }
}
}


PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.