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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
Cyberex
0 / 0 / 0
Регистрация: 06.05.2008
Сообщений: 9
#1

Неправильный вывод данных из стека С++ - C++

06.05.2008, 22:17. Просмотров 1839. Ответов 5
Метки нет (Все метки)

Я только-только начал учить С++. Пишу под ДОСом. И у меня вот баг вылез:

Я хочу поместить цифры в стек и потом их просто вывести от туда, но мне не выводит последнею введенную мною цифру, а заменяет ее 0.00000.

То-есть я пишу:
1
2
3

выводит:
2
1
0

Вот код. Подскажите плиз где бага (подправте код).
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
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <iostream.h>
struct stack
{
double s[1000];
int top;
};
 
void reset(stack* st)
{
st->top = -1;
}
 
void push(stack* st, int s)
{
++st->top;
st->s[st->top] = s;
}
double pop(stack* st)
{
--st->top;
return st->s[st->top];
}
 
main()
{
double str;
int count = sizeof(str);
stack My_stack;
reset(&My_stack);
 
cout << "\nEnter number \n";
for(int i=1; i<=count; i++)
{
cin >> str;
 
push(&My_stack, str);
 
}
 
 
 
while(My_stack.top !=-1)
{
printf ("\n %f", pop(&My_stack));
}
cout << endl;
 
 
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2008, 22:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Неправильный вывод данных из стека С++ (C++):

Неправильный вывод данных - C++
Программа о авторе книги и его, собственно, книге. Надо подсчитать заработок за все переиздательства книги и общий налог. Формуы подставил,...

Ошибка при освобождении памяти (block type is valid) и неправильный вывод структуры данных - C++
Доброго времени суток. У меня есть класс вектор для реализации длинной арифметики. Возникли проблемы с умножением. Я устроил эту...

Неправильный вывод - C++
При x = 0 или x = 1 должен выводиться текст &quot;Нет значений&quot;. При вводе шага(dx) если он имеет 2 знака после запятой, то все нормально....

неправильный вывод - C++
#include &quot;stdafx.h&quot; #include &quot;math.h&quot; #include &lt;iostream&gt; using namespace std; int comp_sum(double *mas, int count); int...

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

Неправильный вывод - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; class Kit{ public: float dovzhuna; float...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
07.05.2008, 10:23 #2
А посмотри внимательно на очерёдность вызовов твоих push() и pop() и попробуй найти лажу сам. Твой алгоритм:

Код
push() {
увеличиваем значение итератора на 1.
используя данный итератор, записываем в стек новое значение
}
и потом, обрати внимание - перед первым вызовом pop() текущий итератор у тебя указывает на последнее помещённое значение в стек. А теперь посмотри на свой pop():

Код
pop() {
уменьшаем итератор на 1.
используя итератор, достаём значение из стека
}
Т.е. , в то время, как твой итератор указывает на верхний элемент, ты сначала уменьшаешь его(таким образом ты никогда не извлечёшь самый верхний элемент из стека).

Вывод: сначала думаем головой, потом делаем, не наоборот. Исправься быстро! Исправленный код пиши сюда.

P.S. И кстати. Писать под ДОСом нынче модно, да?
0
Lord_Voodoo
Супер-модератор
8588 / 2188 / 61
Регистрация: 07.03.2007
Сообщений: 10,890
Завершенные тесты: 1
07.05.2008, 10:44 #3
попробуй так...
Код
#include <stdio.h>
#include <iostream.h>
struct stack
{
double s[1000];
int top;
};
void reset(stack* st)
{
st->top = -1;
}
void push(stack* st, int s)
{
st->top++;
st->s[st->top] = s;
}
double pop(stack* st)
{
return st->s[st->top--];
}
main()
{
double str;
int count = sizeof(str);
stack My_stack;
reset(&My_stack);
cout << "\nEnter number \n";
for(int i = 0; i < count; i++)
{
cin >> str;
push(&My_stack, str);
}
 
while(My_stack.top !=-1)
{
printf ("\n %f", pop(&My_stack));
}
cout << endl;
}
0
Spawns
Сообщений: n/a
07.05.2008, 12:24 #4
Смотри
void push(stack* st, int s) принимает целый тип, в передаётся вещественный(Ну это так), да и вообще попробуй зайти под демагом и посмотри какой у тебя массив...
Cyberex
0 / 0 / 0
Регистрация: 06.05.2008
Сообщений: 9
07.05.2008, 15:55  [ТС] #5
WooDoo спасибо тебе огромное. Наконец-то я понял синтаксис.
Все работает отлично
0
Lord_Voodoo
Супер-модератор
8588 / 2188 / 61
Регистрация: 07.03.2007
Сообщений: 10,890
Завершенные тесты: 1
07.05.2008, 16:57 #6
просто при операции поп ты указатель перемещал раньше времени.... вот и все... а так код ничего - пойдет...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2008, 16:57
Привет! Вот еще темы с ответами:

Неправильный вывод матрицы - C++
Суть проблемы в том, что числа генерируются и насколько я понял, записываются верно в массив конструктор cMatrix::cMatrix(const int...

Неправильный вывод строки, C++ - C++
Напишите часть кода которая исправит вывод чтобы сообщение выводилось один раз, а не столько, сколько символов в строке. Желательно через...

Неправильный вывод результата - C++
Всем Доброго времени суток, извините за такое название темы, другого не придумал.. Проблема в том, что я не могу понять как вывести...

Неправильный вывод ответа - C++
написал программу, в y при вводе люього числа записывается какая-то непонятина. Помогите разобратться в чем дело? #include &lt;stdio.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.05.2008, 16:57
Ответ Создать тему
Опции темы

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