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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Tige
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 29
#1

Список (найти ошибку) - C++

17.03.2013, 01:27. Просмотров 441. Ответов 7
Метки нет (Все метки)

Вот вроде написал программу использующую список. Состоит из 3х элементов, туда просто записываются числа 1 2 3, далее в цикле это все должно выводится. Не могу понять, почему выводятся только цифры 3 и 2, тем более в обратном порядке. Кому не сложно, подскажите где ошибка (нужно чтобы выводилось 1 2 3).
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
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <stdlib.h>
 
struct list
{
    long long numb;
    struct list *next;
} ;
 
int main()
{
    int i;
    struct list* temp=0;
    struct list* head;
 
    head=(struct list*) malloc(sizeof(struct list));
    head->numb=1;
    head->next=temp;
    temp=head;
    
    head=(struct list*) malloc(sizeof(struct list));
    head->numb=2;
    head->next=NULL;
    temp=head;
 
    head=(struct list*) malloc(sizeof(struct list));
    head->numb=3;
    head->next=temp;
    temp=head;
 
    head=temp;
    while(head!=NULL)
    {
        printf("%lld\n", head->numb);
        head=head->next;
        
    }
    
    getchar();
    return 1;
}
Добавлено через 32 минуты
Исправил кое-что(24 и 29 строки), но теперь вообще выводит только 3

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
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <stdlib.h>
 
struct list
{
    long long numb;
    struct list *next;
} ;
 
int main()
{
    int i;
    struct list* temp=0;
    struct list* head;
 
    head=(struct list*) malloc(sizeof(struct list));
    head->numb=1;
    head->next=temp;
    temp=head;
    
    head=(struct list*) malloc(sizeof(struct list));
    head->numb=2;
    head->next=temp;
    temp=head;
 
    head=(struct list*) malloc(sizeof(struct list));
    head->numb=3;
    head->next=NULL;
    temp=head;
 
    head=temp;
    while(head!=NULL)
    {
        printf("%lld\n", head->numb);
        head=head->next;
        
    }
    
    getchar();
    return 1;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2013, 01:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Список (найти ошибку) (C++):

Односвязный список С++ (найти ошибку) - C++
Класс должен описывать односвязный список. При использовании метода print() зацикливается с выводом teil-&gt;value . &quot;На бумаге&quot; все просто...

Связанный список, найти ошибку - C++
http://iguania.ru/stati-po-programmirovaniiu/svyazanniy-spisok.html Вот статья про связанный список, все доступно и понятно написано,...

Список (найти ошибку в коде) - C++
Почему компилируется программа? Вот эта функция: List::node* seach(T el) { for(node* p = head-&gt;next; p != NULL; p = p-&gt;next) ...

двунаправленный список (помогите найти ошибку) - C++
помогите найти ошибку, что то не верно, не могу понять что #include &lt;iostream&gt; using namespace std; typedef char type; struct Node ...

Динамический список строк. Найти ошибку в коде - C++
#include &lt;iostream&gt; #include &lt;list&gt; // подключаем заголовок списка // заголовок итераторов #include &lt;locale&gt; #include &lt;string.h&gt; ...

Связанный список. List, не могу найти ошибку в куске кода - C++
Программа работает, но работает не правильно. Суть функции, создается список, заполняется, потом надо по нужным условиям найти элементы и...

7
MrGluck
Модератор
Эксперт CЭксперт С++
7424 / 4539 / 673
Регистрация: 29.11.2010
Сообщений: 12,319
17.03.2013, 01:29 #2
Tige, а если использовать двунаправленный список? (добавляется поле struct list *prev)

И вам в С надо, судя по коду.
1
Tige
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 29
17.03.2013, 01:32  [ТС] #3
MrGluck, тут просто нужен однонаправленный список.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7424 / 4539 / 673
Регистрация: 29.11.2010
Сообщений: 12,319
17.03.2013, 01:36 #4
Насколько я понял, вам нужно, чтобы 3 переменные считывались в список, а затем выводилось его содержимое на экран, начиная с головы? И все на С.

Насколько подойдет вариант предварительно записать их в массив в обратном порядке? И готовую программу я, по-моему, вам уже кидал.
1
Tige
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 29
17.03.2013, 01:44  [ТС] #5
Знаю, что не совсем в нужный раздел пишу, но если вам не сложно, не могли бы вы написать тот же код для СИ?

А точнее вот эти строки:

std::cin >> x; // считываем в переменную x
pl = new list; // выделяем память
std::cout << pl->key << " "; // выводим на экран
delete pl; // освобождаем память
0
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
17.03.2013, 12:13 #6

Не по теме:

Tige, знаете, но пишете.


Если я не ошибаюсь, то сама реализация предполагает, что элементы будут в обратном порядке. Каждый раз, когда Вы заносите новое значение, Вы смещаете главный указатель на него, а нужно, чтобы этот указатель остановился на одном элементе - первом.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   s* cur(NULL), *lptr(NULL);   
           for (int i=0; i<10; ++i)
           {
                if (!first)
                {
                     cur = new mylist::s();
                     cur->data = i;
                     cur->next = first;
                     first = cur;
                     lptr = first;
                 }
                 else
                 {
                  cur = lptr;
                  cur->next = new mylist::s();
                  cur = cur->next;
                  cur->data = i;
                  lptr = cur;
               }
           }
В данном куске кода в список в прямом порядке добавляются числа от 0 до 9.

Полный код можно увидеть здесь:
Создать список и заполнить его 10 числами из ряда Фибоначчи
1
MrGluck
Модератор
Эксперт CЭксперт С++
7424 / 4539 / 673
Регистрация: 29.11.2010
Сообщений: 12,319
17.03.2013, 16:51 #7
Ответ я вам дал в вашей теме-дубликате.
Простейший список
0
BumerangSP
17.03.2013, 17:38     Список (найти ошибку)
  #8
 Комментарий модератора 
Кросспостинг. Закрыто.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2013, 17:38
Привет! Вот еще темы с ответами:

Найти ошибку в программе: в visual studio выдает ошибку - C++
#include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int main() { double x, E, ypred, y, S; ...

Найти слова, повторяющиеся более одного раза, не могу найти ошибку - C++
#include &lt;iostream&gt; using namespace std; void obr1(char **s, char **mas, int n, int m) { int i; int k; char *tm; for(i...

Помогите найти ошибку: По двум сторонам и углу найти все остальное - C++
Доброго времени суток. В универе дали задание написать программу &quot;По двум сторонам и углу между ними в треугольнике АВС найти два остальных...

Найти сумму первых n-четных натуральных чисел (найти ошибку) - C++
Нужно найти сумму первых n-четных натуральных чисел. Ошибка вылетает на 13 строке, должно быть я не правильно код составил, алгоритм не тот...


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

Или воспользуйтесь поиском по форуму:
8
17.03.2013, 17:38
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru