| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Что то не так с isspace(); |
| Автор: lllJollyRogerlll 26.1.2015, 23:15 | ||||||
| Не судите строго, но если считаете меня полным идиотом - можно прямо в лоб. Ситуация такая - нужно решить задачку, она достаточно легкая(по крайней мере так написано на сайте, где я её нашел). Но у меня видимо не хватает мозгов для того что бы решить её. Вот суть:
Я не хочу что бы вы за меня её решили, планирую сам разобраться. Для начала я решил поиграть со строками, а потом уже когда пойму что да как - перейду к вещественным числам. Итак, сейчас я написал немного кода, где создаю переменную, символьный массив, затем предлагаю пользователю инициализировать этот массив. Дальше - проверяю его, если идут символы - я копирую в массив, сохраненный в ДРП и так пока не встречается пробел, когда встречается пробел - указатель на строку отправляется в стек, и потом все по новой. В конце я вывожу это дело на экран и освобождаю стек. Звучит не плохо, но на деле не фурычит. Отладчиком проверяю - вылетает в
Спасибо! Модератор: используй тег CODE только для кода. Для цитирования заданий или сообщений об ошибках лучше подходит QUOTE - не нарушается отображение форума на длинных строках. |
| Автор: lllJollyRogerlll 27.1.2015, 10:21 | ||||||
ну вот же, пока в строке не встречается пробел - в pChar записывается наш буфер,
а когда встречается пробел - ссылка на pChar(строку без пробелов) - передается в стек, потом освобождаем *pChar и создаем новую строку, с чистого листа, так сказать. Но если этот пробел идет после другого пробела, is_space = true; - ничего не делаем, продолжаем цикл. Идея была такой... )
Кстати, попробовал вариант с unsigned char, даже компилироваться не хочет. |
| Автор: baldina 27.1.2015, 10:39 | ||
по крайней мере при первом вызове pChar может быть не инициализирован (если данные с пробела начинаются) да ну! http://ideone.com/kgnJ2y и что говорит? unsigned кстати можно поставить и в настройках компилятора. Добавлено через 4 минуты и 4 секунды lllJollyRogerlll, разделите свой код на части - хотя бы сделайте функцию чтения числа и функцию, пропускающую пробелы. отлаживать будет проще. |
| Автор: lllJollyRogerlll 27.1.2015, 11:05 | ||
http://dim.st/i66414.jpg |
| Автор: baldina 27.1.2015, 12:25 | ||
| lllJollyRogerlll, забейте на unsigned (совет был неудачный; идея сводится к тому, что результат isspace определен только если вход лежит в опр. диапазоне), тут не в нем дело. программа падает, потому что вы не инициализируете данные. a) если первый символ - пробел, то в массив запихивается неинициализируемый указатель. это неправильно, но в месте вызова пока еще не страшно. однако в последующих вызовах
приводит к краху, т.к. i может принимать значения до 299, а размер по адресу pChar - 30 б) если первый символ не пробел, то производится запись в pChar[0], а pChar указывает неизвестно куда. тут все падает. |
| Автор: lllJollyRogerlll 27.1.2015, 15:40 | ||||
Переписал, теперь у меня вылетает исключение вообще по каким то непонятным причинам, вот в этом месте:
Вот код полностью:
Дуристика какая то выходит вообще, не понимаю, для чего я это все написал, если это не поможет решению задачи. Но уже интересно тем не менее довести до конца хоть такой вариант, раз мне не дано решить задачу.. |
| Автор: baldina 27.1.2015, 15:56 |
| у меня работает (правда выкинул windows.h) |