Форум программистов, компьютерный форум CyberForum.ru

Ошибка при добавлении элемента в список - C++

Восстановить пароль Регистрация
 
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
01.05.2014, 18:26     Ошибка при добавлении элемента в список #1
Первый элемент всегда выводится правильно, у второго почему-то портится указатель. Третий вообще куда-то исчезает.

Структура:
C++
1
2
3
4
5
6
struct Rastenie
{
    char nazvanie[30], klass[30], strana[30];
    bool esti;
    Rastenie *sled;
};
Добавление элемента в список:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Dobaviti(Rastenie *&pervyi)
{
    Rastenie *novyi = new Rastenie;     // создаем новый элемент
    novyi->sled = pervyi;               // добавляем его в начало
    pervyi = novyi;
 
    fflush(stdin);                      // очищаем поток ввода, чтобы в нем не застрял '\n'
    printf("Название: ");               // читаем поля
    fgets(novyi->nazvanie,30,stdin);
    novyi->nazvanie[strlen(novyi->nazvanie)-1] = 0;
    printf("Класс: ");
    fgets(novyi->klass,30,stdin);
    novyi->klass[strlen(novyi->klass)-1] = 0;
    printf("Страна: ");
    fgets(novyi->strana,30,stdin);
    novyi->strana[strlen(novyi->strana)-1] = 0;
    printf("Раньше существовал - 0, сейчас произрастает - 1: ");
    scanf("%i",&novyi->esti);
    printf("\nЭлемент добавлен!\n");
    system("pause");
}
Вывод, если что:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Vyvod(Rastenie *pervyi)
{
    if (pervyi == NULL)
    {
        printf("Список пуст!\n");
        system("pause");
        return;
    }
 
    Rastenie *tek = pervyi;
 
    printf("+--------------------------------------------------------------------+\n");
    printf("| %15s | %15s | %15s | %12s |\n","Название","Класс","Страна","Произрастает");
    while (tek != NULL)
    {
        printf("| %15s | %15s | %15s | %12s |\n",tek->nazvanie,tek->klass,tek->strana,
            (tek->esti? "да" : "нет"));
        tek = tek->sled;
    }
    system("pause");
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alex5
883 / 618 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
01.05.2014, 20:35     Ошибка при добавлении элемента в список #2
Цитата Сообщение от Керра Посмотреть сообщение
у второго почему-то портится указатель.
Вы имеете ввиду поле структуры Rastenie::sled ?
Тогда можно с помощью отладчика установить, где это происходит.
Можно установить breakpoint в функции Dobaviti() и в Vyvod() (внутри цикла while).
Правильные ли там значения sled ?
volvo
Супер-модератор
 Аватар для volvo
21827 / 14190 / 3956
Регистрация: 22.10.2011
Сообщений: 25,075
Записей в блоге: 2
01.05.2014, 21:06     Ошибка при добавлении элемента в список #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Керра, компилятор же выдает предупреждение, не надо для ввода bool-а пользоваться строкой "%i". Вводи int, и потом переноси его в поле записи. Это починит указатели. По крайней мере, у меня на gcc это исправление привело к нормализации вывода.
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
01.05.2014, 21:17  [ТС]     Ошибка при добавлении элемента в список #4
UI, понятно, спасибо
Yandex
Объявления
01.05.2014, 21:17     Ошибка при добавлении элемента в список
Ответ Создать тему
Опции темы

Текущее время: 01:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru