![]() |
|
Модераторы: bsa |
![]()
|
|
| mrprim |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 7.6.2016 Репутация: нет Всего: нет |
Доброго времени суток
Возникла проблема с методом PUSH цикл работает не так как я хотел и не могу понять как исправить [code=cpp] по факту он должен пробежать по нашему массиву vm_programm_code[] и выдать на 5 10 0 0 0 но он находит первый элемент и сваливает 5 0 0 0 0 Это сообщение отредактировал(а) mrprim - 29.6.2016, 15:44 |
|||
|
||||
| baldman88 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 18.1.2009 Репутация: 1 Всего: 7 |
В 20-й строке в условии должен быть двойной знак равенства. И 24-я строчка не нужна. Да и ADD не определено. Оно вообще компилируется?
Это сообщение отредактировал(а) baldman88 - 7.6.2016, 15:31 |
|||
|
||||
| Envy |
|
||||
|
Unregistered |
Этот ответ добавлен с нового Винграда - http://vingrad.com |
||||
|
|||||
| mrprim |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 7.6.2016 Репутация: нет Всего: нет |
это я код подтёр что бы не вкидывать кучу не нужной инфы сюда, а вызов остался, извините
i++ помогло но не на 100% теперь выводит 5 10 0 0 0 и если можно вопрос - Почему нужно дополнительно писать i++ если мы в условии указали? НО при добавление в конец массива uint32_t vm_programm_code[LENGHT] = {PUSH, 5, PUSH, 10, ADD, PUSH, 3}; что бы протестить разные вариации кода выдает всё равно 5 10 0 0 0 |
|||
|
||||
| Envy |
|
||||||
|
Unregistered |
Потому что i меняется в цикле как [0,1,2,3,4] А нам нужно читать только команды, которые лежат по индексам [0, 2, 4, ...]
Это потому что если vm_programm_code[i] не равно PUSH, то выполнение функции завершается.
Этот ответ добавлен с нового Винграда - http://vingrad.com |
||||||
|
|||||||
| baldman88 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 18.1.2009 Репутация: 1 Всего: 7 |
Уберите else return, который в 24-й строке. Ну, и при добавлении элементов в массив, Вы не збываете мненять значение LENGHT? И в 19-й строке 5 лучше поменять на LENGHT.
Это сообщение отредактировал(а) baldman88 - 7.6.2016, 16:06 |
|||
|
||||
| mrprim |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 7.6.2016 Репутация: нет Всего: нет |
собственное теперь всё работает, хочу добавить обработчик исключений, если в коде будет допущена ошибка, и по логике нужно просто проскочить пишу после всех сравнений: else i++; и видимо не верно
Это сообщение отредактировал(а) mrprim - 7.6.2016, 18:53 |
|||
|
||||
| Envy |
|
|||
|
Unregistered |
Я посоветую реализовать сначала стек, с его методами push и pop, а уже потом переходить к реализации vm. Так код будет проще и чище. Да и упражнение хорошее.
Вот этого вполне хватит. А реализацию vm можно будет переделать на такой же стек и switch-case:
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |