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

Вывод односвязного списка - C++

Восстановить пароль Регистрация
 
nstwf
86 / 76 / 30
Регистрация: 19.02.2016
Сообщений: 324
Завершенные тесты: 1
09.06.2016, 16:20     Вывод односвязного списка #1
Здравствуйте, помогите найти ошибку в функции.
Выводит только первый элемент списка, даже если ты добавил больше..
Ввод
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
struct List* CreateList(void)
{
    struct List* Begin = NULL, *Previos = NULL, *Current = NULL;
    char c = 'y';
    while (c == 'y' || c == 'Y')
    {
        Current = (struct List*)malloc(sizeof(struct List));
        if (Begin == NULL)
            Begin = Current;
        else
            Previos->Next = Current;
        Previos = Current;
        cout << "Номер продукта: ";
        scanf("%d", &Current->number);
        cout << "Название: ";
        scanf("%s", Current->name);
        cout << "Цена: ";
        scanf("%d", &Current->cost);
        cout << "Срок хранения: ";
        scanf("%d", &Current->srkhr);
        cout << "Дата выпуска: ";
        scanf("%s", Current->datavip);
        cout << "Срок годности: ";
        scanf("%s", Current->srgodn);
        Begin->Next = NULL;
        cout << "Продолжить ввод? y/n";
        c = _getch();
    }
    Previos->Next = NULL;
    return Begin;
}
Вывод - вот тут и ошибка..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void DisplayList(struct List* Begin)
{
    struct List* Current = Begin;
    if (Begin == NULL)
    {
        cout << "Список пуст!\n";
        return;
    }
    cout << "Список продуктов:\n";
    while (Current)
    {
        cout << Current->number
            << ". \nНазвание: " << Current->name
            << ", цена - " << Current->cost
            << ", срок хранения - " << Current->srkhr
            << ".\nДата выпуска: " << Current->datavip
            << ". Срок годности: " << Current->srgodn
            << "." << endl
            << "=======================================\n" << endl;
 
        Current = Current->Next;
    }
    cout << endl;
}
Добавлено через 1 час 17 минут
update
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2016, 16:20     Вывод односвязного списка
Посмотрите здесь:

C++ Заполнение односвязного списка
Сортировка односвязного списка C++
Ввод и вывод односвязного списка C++
C++ Шаблон односвязного списка
C++ Сортировка односвязного списка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
olya7
476 / 293 / 91
Регистрация: 18.02.2013
Сообщений: 684
09.06.2016, 17:08     Вывод односвязного списка #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
вот так уместнее
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
List* CreateList(List*beg)// вот так было бы логичнее
{
    List *Current ;
    char c = 'y';
    while (c == 'y' || c == 'Y')
    {
        Current = (List*)malloc(sizeof( List));
        cout << "Номер продукта: ";
        scanf("%d", &Current->number);
        cout << "Название: ";
        scanf("%s", Current->name);
        cout << "Цена: ";
        scanf("%d", &Current->cost);
        cout << "Срок хранения: ";
        scanf("%d", &Current->srkhr);
        cout << "Дата выпуска: ";
        scanf("%s", Current->datavip);
        cout << "Срок годности: ";
        scanf("%s", Current->srgodn);
        Current-> Next=beg;
        beg = Current ;
        cout << "Продолжить ввод? y/n";
        c = _getch();
    }
    return beg;
}
nstwf
86 / 76 / 30
Регистрация: 19.02.2016
Сообщений: 324
Завершенные тесты: 1
09.06.2016, 17:20  [ТС]     Вывод односвязного списка #3
olya7, Благодарю

Добавлено через 4 минуты
olya7, а можно теперь узнать, как к ней обращаться в main, ибо просто Begin, как в остальных - выдает ошибку?
olya7
476 / 293 / 91
Регистрация: 18.02.2013
Сообщений: 684
09.06.2016, 17:41     Вывод односвязного списка #4
Begin должен быть локальной переменной для main, а вызов, соответственно, должен выглядеть как
C++
1
Begin=CreateList(Begin)
;
nstwf
86 / 76 / 30
Регистрация: 19.02.2016
Сообщений: 324
Завершенные тесты: 1
09.06.2016, 17:47  [ТС]     Вывод односвязного списка #5
Цитата Сообщение от olya7 Посмотреть сообщение
Begin должен быть локальной переменной для main, а вызов, соответственно, должен выглядеть как
olya7, если вставить ваш код, то - создает какой-то непонятный элемент последним...
Миниатюры
Вывод односвязного списка  
olya7
476 / 293 / 91
Регистрация: 18.02.2013
Сообщений: 684
09.06.2016, 17:48     Вывод односвязного списка #6
надо смотреть код
nstwf
86 / 76 / 30
Регистрация: 19.02.2016
Сообщений: 324
Завершенные тесты: 1
09.06.2016, 17:57  [ТС]     Вывод односвязного списка #7
Цитата Сообщение от olya7 Посмотреть сообщение
надо смотреть код
Код вывода/ввода в первом сообщении.
Что-нибудь еще нужно скинуть?


Дело в том, что если список состоит только из 1 int, то выводятся все числа,(делал на примере этого кода - свой) код ввода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
struct List* CreateList(void)
{
    struct List* Begin = NULL, *Previos = NULL,
        *Current = NULL;
    char Ok = 'y';
    while (Ok == 'y')
    {
        printf("\nEnter the numbers of List: ");
        Current = (struct List*)malloc(sizeof(struct List));
        if (Begin == NULL)
            Begin = Current;
        else
            Previos->Next = Current;
        Previos = Current;
        scanf("%d", &Current->x);
        fflush(stdin);
        printf("\nContinue? (Y/N):");
        scanf("%c", &Ok);
    }
    Previos->Next = NULL;
    return Begin;
}
olya7
476 / 293 / 91
Регистрация: 18.02.2013
Сообщений: 684
09.06.2016, 18:07     Вывод односвязного списка #8
main покажите
nstwf
86 / 76 / 30
Регистрация: 19.02.2016
Сообщений: 324
Завершенные тесты: 1
09.06.2016, 18:10  [ТС]     Вывод односвязного списка #9
olya7,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void main()
{
    int k;
    struct List* Begin;
    k = _getch();
    system("cls");
    switch (k)
    {
    case '1':
        system("cls");
        Begin = CreateList(Begin);
        _getch();
        system("cls");
        break;
    case '2':
        system("cls");
        DisplayList(Begin);
        _getch();
        system("cls");
        break;
    }
    _getch();
}
olya7
476 / 293 / 91
Регистрация: 18.02.2013
Сообщений: 684
09.06.2016, 18:13     Вывод односвязного списка #10
Цитата Сообщение от fleqfvkb Посмотреть сообщение
struct List* Begin;
должно быть
C++
1
List* Begin=NULL;
nstwf
86 / 76 / 30
Регистрация: 19.02.2016
Сообщений: 324
Завершенные тесты: 1
09.06.2016, 18:36  [ТС]     Вывод односвязного списка #11
Цитата Сообщение от olya7 Посмотреть сообщение
должно быть
А не можете сказать, почему мой переделанный код не уместен, хотя с int работает прекрасно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
struct List* CreateList(void)
{
    struct List* Begin = NULL, *Previos = NULL,
        *Current = NULL;
    char Ok = 'y';
    while (Ok == 'y')
    {
        printf("\nEnter the numbers of List: ");
        Current = (struct List*)malloc(sizeof(struct List));
        if (Begin == NULL)
            Begin = Current;
        else
            Previos->Next = Current;
        Previos = Current;
        scanf("%d", &Current->x);
        fflush(stdin);
        printf("\nContinue? (Y/N):");
        scanf("%c", &Ok);
    }
    Previos->Next = NULL;
    return Begin;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2016, 18:42     Вывод односвязного списка
Еще ссылки по теме:

C++ Вывод односвязного списка на C
Печать односвязного списка C++
Создание и вывод односвязного списка (выводится только первый элемент) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
olya7
476 / 293 / 91
Регистрация: 18.02.2013
Сообщений: 684
09.06.2016, 18:42     Вывод односвязного списка #12
честно - не знаю... но на мой взгляд, у Вас избыточное количество переменных, совершенно не нужных для исполнения этой задачи
Yandex
Объявления
09.06.2016, 18:42     Вывод односвязного списка
Ответ Создать тему
Опции темы

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