![]() |
|
Модераторы: bsa |
![]()
|
|
| n199a |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.11.2011 Репутация: нет Всего: нет |
При компиляции вылазит:
error: expected primary-expression before '=' token error: 's' was not declared in this scope warning: deprecated conversion from string constant to 'char*' Но если obr и showword сделать отдельно, то всё нормально компилируется. Ошибка кроется в типах возвращаемых значений для функций...
|
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 8 Всего: 146 |
Первых двух ошибок в коде нет.
Третью ошибку (точнее не ошибку, а warning) можно убрать, объявив функцию так: void showword(char *s, const char *divider){ Еще компилятор может выдавать предупреждение на строчку №3. Исправить можно так: if((s = strtok(s, divider))!=NULL){ Строчка №6 несовсем корректно написана, замени «'\0'» либо на «NULL» либо на «0». showword(NULL, divider); В функции obr не хватает вызова функции free. Это сообщение отредактировал(а) 586 - 27.1.2014, 09:40 |
|||
|
||||
| n199a |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.11.2011 Репутация: нет Всего: нет |
Вот, глянь, весь код:
Это сообщение отредактировал(а) n199a - 27.1.2014, 11:26 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Ошибка тут -
А вообще код ужасен - дикая помесь С и С++, и goto в придачу |
|||
|
||||
| n199a |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.11.2011 Репутация: нет Всего: нет |
Ну да. Дают материал на Си, а я С++ читаю. Вот приходится смешивать, брать кусками, что знаю С текстом материал просто не внимательно читал, пришлось в просторах интернета искать решение. А чего goto так недолюбливают? Код действительно плох, ещё в придачу вылазит:
Почему #define лишний? Без его нормально скомпилировалось.... P.S. Читаю Хенкеманс, Ли - Программирование на С++, может стоит другое почитать? Добавлено через 5 минут и 35 секунд Что посоветуешь изменить? Не оставлять же его в таком виде Это сообщение отредактировал(а) n199a - 27.1.2014, 12:30 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Лишний не он, а знак '=' в нем А того, что его надо использовать только там, где без него никак не обойтись. В данном случае классический цикл (for(;;) ) и без goto точно обойтись можно Ну либо С либо С++. И уж точно не std::cout и malloc/free/strdup вместе! А рекурсивный showword по заданию требовался? Такой метод разбиения на слова не самый лучший, мягко говоря |
|||
|
||||
| n199a |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.11.2011 Репутация: нет Всего: нет |
||||
|
||||
| n199a |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.11.2011 Репутация: нет Всего: нет |
Вот написал новый. Почему, когда нажимаю 3, то сразу выскакивает "Press the key ", без предложения ввода строки "Enter stroku: " ?
Это сообщение отредактировал(а) n199a - 27.1.2014, 15:05 |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Можно еще проще:
Нельзя смешивать ввод вывод через потоки С++ и С FILE на одном и том же файле (в вашем случае на STDIN/STDOUT) Кстати, вашу функцию можно сделать и рекурсивной - тогда массив на слова не понадобится (но и strdup вкупе с free тоже не нужен)
Собственно очень похоже на ваш первоначальный вариант, но без лишних манипуляций с динамической памятью. PS. Я просмотрел, что вам надо было развернуть слова в обратном порядке - тут рекурсивная версия выглядит вполне ничего Это сообщение отредактировал(а) xvr - 27.1.2014, 17:25 |
||||
|
|||||
| trinitr0 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 25.6.2013 Репутация: нет Всего: нет |
Потому что: 1. Нарушает парадигму структурного программирования (последовательность выполнения) 2. Препятствует оптимизации компиляторами управляющих структур 3. Может нарушать логику программ 4. Может приводит к деградации производительсности (из-за сброса и переинициализации конвейров CPU) 5. Непредсказумое значение иницилизированных переменных до их применения 6. Пропуск инициализации при входе в цикл 7. Пропуск пролога при выходе из функции Ещё в далёком 1968г Эдсгер Дейкстра написал "Доводы против оператора goto" Это сообщение отредактировал(а) trinitr0 - 27.1.2014, 17:39 |
|||
|
||||
| n199a |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.11.2011 Репутация: нет Всего: нет |
||||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Enter stroku: даже не выводит? Или все же выводит, но строку не вводит? Если второе, то это правильно - предыдущий cin >> key прочел число, а вот перевод строки в буфере остался, вот он пустую строку и вводит |
|||
|
||||
| n199a |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.11.2011 Репутация: нет Всего: нет |
Enter stroku выводит. А что тогда делать с буфером? Это сообщение отредактировал(а) n199a - 27.1.2014, 23:38 |
|||
|
||||
| akizelokro |
|
||||||||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Чё это у вас?
при столкновении с ARRAYSIZE приводит к забавным эффектам (фикх отыщещь). например. Да и -1 может возвратить
никто так не пишет. можно
а предыдущий вариант может относиться только к трюкам, либо к непредсказуемым последствиям и противоречит логике функции 'strtok'. Не говоря уже, что лучше s получить в стеке в порядке разбора аргументов функции showword и оставить временно в покое. Потом же у функции showword идёт рекурсивный вызов.
здесь рисуется memory leak. Неделю пил, но strdup, походу, программер должен подчищать самостоятельно. Так что istr переобозначать не надо. "Шоб було" и "этапы большого пути". Это сообщение отредактировал(а) akizelokro - 28.1.2014, 00:40 -------------------- a = a + b; b = a - b; a = a - b; |
||||||||
|
|||||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |