![]() |
|
Модераторы: bsa |
![]()
|
|
| lllJollyRogerlll |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 20.11.2014 Репутация: нет Всего: нет |
Не судите строго, но если считаете меня полным идиотом - можно прямо в лоб.
Ситуация такая - нужно решить задачку, она достаточно легкая(по крайней мере так написано на сайте, где я её нашел). Но у меня видимо не хватает мозгов для того что бы решить её. Вот суть:
Я не хочу что бы вы за меня её решили, планирую сам разобраться. Для начала я решил поиграть со строками, а потом уже когда пойму что да как - перейду к вещественным числам. Итак, сейчас я написал немного кода, где создаю переменную, символьный массив, затем предлагаю пользователю инициализировать этот массив. Дальше - проверяю его, если идут символы - я копирую в массив, сохраненный в ДРП и так пока не встречается пробел, когда встречается пробел - указатель на строку отправляется в стек, и потом все по новой. В конце я вывожу это дело на экран и освобождаю стек. Звучит не плохо, но на деле не фурычит. Отладчиком проверяю - вылетает в
Спасибо! Модератор: используй тег CODE только для кода. Для цитирования заданий или сообщений об ошибках лучше подходит QUOTE - не нарушается отображение форума на длинных строках. Это сообщение отредактировал(а) bsa - 27.1.2015, 11:41 |
||||||
|
|||||||
| baldina |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
определите buffer как unsigned char
непонятно, зачем запихивать строки, если нужны числа. да и вообще, зачем считывать символы, если нужны числа
так обработается всего одна строка (до '\n'), а не весь вход конечно, задача предполагает эффективное решение, которое заключается в считывании всего буфера в память (он ограничен по условию), и затем обработке (перевернув, или, что быстрее, с конца) без хранения промежуточных данных. в этом случае посимвольная обработка потребуется, но более изощренным способом Добавлено @ 00:35 кстати, если строка длиннее буфера, то в конце буфера вы, скорее всего, получите обрывок числа... Добавлено @ 00:41 lllJollyRogerlll, если вы все еще хотите обрабатывать ввод вручную, вводите не по строкам, а посимвольно
Это сообщение отредактировал(а) baldina - 27.1.2015, 00:41 |
||||||
|
|||||||
| lllJollyRogerlll |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 20.11.2014 Репутация: нет Всего: нет |
ну вот же, пока в строке не встречается пробел - в pChar записывается наш буфер,
а когда встречается пробел - ссылка на pChar(строку без пробелов) - передается в стек, потом освобождаем *pChar и создаем новую строку, с чистого листа, так сказать. Но если этот пробел идет после другого пробела, is_space = true; - ничего не делаем, продолжаем цикл. Идея была такой... )
Кстати, попробовал вариант с unsigned char, даже компилироваться не хочет. |
||||||
|
|||||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
по крайней мере при первом вызове pChar может быть не инициализирован (если данные с пробела начинаются) да ну! http://ideone.com/kgnJ2y и что говорит? unsigned кстати можно поставить и в настройках компилятора. Добавлено через 4 минуты и 4 секунды lllJollyRogerlll, разделите свой код на части - хотя бы сделайте функцию чтения числа и функцию, пропускающую пробелы. отлаживать будет проще. |
|||
|
||||
| lllJollyRogerlll |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 20.11.2014 Репутация: нет Всего: нет |
||||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
lllJollyRogerlll, забейте на unsigned (совет был неудачный; идея сводится к тому, что результат isspace определен только если вход лежит в опр. диапазоне), тут не в нем дело.
программа падает, потому что вы не инициализируете данные. a) если первый символ - пробел, то в массив запихивается неинициализируемый указатель. это неправильно, но в месте вызова пока еще не страшно. однако в последующих вызовах
приводит к краху, т.к. i может принимать значения до 299, а размер по адресу pChar - 30 б) если первый символ не пробел, то производится запись в pChar[0], а pChar указывает неизвестно куда. тут все падает. |
|||
|
||||
| lllJollyRogerlll |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 20.11.2014 Репутация: нет Всего: нет |
Переписал, теперь у меня вылетает исключение вообще по каким то непонятным причинам, вот в этом месте:
Вот код полностью:
Дуристика какая то выходит вообще, не понимаю, для чего я это все написал, если это не поможет решению задачи. Но уже интересно тем не менее довести до конца хоть такой вариант, раз мне не дано решить задачу.. |
||||
|
|||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
у меня работает (правда выкинул windows.h)
|
|||
|
||||
![]()
|
| Правила форума "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. |