|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
08.02.2012, 23:51 | #1 |
Пользователь
Регистрация: 08.02.2012
Сообщений: 31
|
Первые трудности с программированием на C
Привет. Я начала изучать C. Возникли первые трудности. Задание:напишите программу для вывода входного потока по одному слову в строке. Буду очень признательна, если поможете и объясните. Заранее спасибо..
|
09.02.2012, 01:31 | #2 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
|
09.02.2012, 17:59 | #3 |
Пользователь
Регистрация: 08.02.2012
Сообщений: 31
|
Хорошо...вот код..пыталась что-то сделать...но это явно не правильно...не знаю как задать условие чтобы каждое слово выводил в строку (не судите строго, я только начала учить):
Код:
Последний раз редактировалось ACE Valery; 13.02.2012 в 17:58. |
10.02.2012, 20:52 | #4 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
Есть несколько способов решения.
Первый способ: Если мы договоримся, что входной поток это строка, состаящая из слов, то пойдёт и так: Код:
Если нашей программе будет перенаправляться файл cо множеством строк, вот так: prog < file То тут надо будет двигаться, как вы начали. То есть понять, как работает программа из K&R по подсчёту слов, символов, строк и переработать эту программу для выполнения упражнения. Я думаю, авторы этого добивались. Точно ли вы разобрались, как работает программа по подсчёту слов, символов, строк? Если нет спрашивайте, что непонятно. Вот вам мой вариант алгаритма, описанного с помощью ДРАКОН-схемы: Код:
Код:
Код:
Последний раз редактировалось 8Observer8; 10.02.2012 в 21:10. |
10.02.2012, 21:14 | #5 |
Пользователь
Регистрация: 08.02.2012
Сообщений: 31
|
Вроде разобралась (я по поводу подсчета слов). Вот код программы:
Код:
Код:
Последний раз редактировалось ACE Valery; 13.02.2012 в 17:59. |
10.02.2012, 21:17 | #6 |
Пользователь
Регистрация: 08.02.2012
Сообщений: 31
|
Но я еще маленько разбиралась и написала так:
Код:
Только слова он не выводит... Кстати, спасибо за помощь.. Последний раз редактировалось ACE Valery; 13.02.2012 в 17:59. |
10.02.2012, 21:49 | #7 | ||
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
Цитата:
Цитата:
Дальше интереснее. Если мы считаем опять символ, то код выделенный красным сработает по-другому. state теперь равен IN и счётчик не инкриминируется. И в самом деле зачем, если мы уже учли это слово. |
||
10.02.2012, 22:15 | #8 |
Пользователь
Регистрация: 08.02.2012
Сообщений: 31
|
Конечно, первый способ он короче и понятнее, если знать функции. Но я еще до этого момента не дошла =). Посмотрела ваш алгоритм. Вот давно мучил вопрос с EOF. У вас написано: считанный символ-это конец файла(EOF)? Как понять считанный символ есть конец файла? Т.е. мы вводим поток символов в строку и символ, который есть последний символ является концом потока символов, ну и строки тоже??? правильно?
|
11.02.2012, 10:21 | #9 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
Договоримся, что у нас ASCII кодировка, а не UNICOD. ASCI-символ - это один байт (UNICOD- 2 байта, мы его пока рассматривать не будем). В файле хранятся не сами символы, а их ASCII-коды. Вот таблица всех ASCII символов --> ссылка.
Создайте файл и напишем в файле что-нибудь, к примеру: ol-k_34 is good girl! Сохраните и закройте этот файл. Если у вас есть TotalCommander, то откройте файл, нажав кнопку F3. Нажмите в меню Lister'a "Вид" -> "Шестнадцатеричный" (или клавишу 3) Если у вас файловый менеджер - FAR, то откройте файл, нажав кнопку F3. Далее, нажмите F4. Здесь и везде красное подчёркивание это пробел! (_ - это пробел) Вы увидите следующую картину: 0000000000: 6F 6C 2D 6B 5F 33 34 0D | 0A 69 73 0D 0A 67 6F 6F ol-k_34..is..goo 0000000010: 64 0D 0A 67 69 72 6C 21 | 0D 0A _______________d..girl!.. Точками я обозначил "невидимые" символы (так делает программа hixdump в Linux'e, которая выводит тоже самое на экран) Код 0Dh (13d) - CR Carriage Return (Перевод каретки) (см. раздел "Форматирование" --> ссылка) Код 0Ah (10d) - LF Line Feed (Перевод строки) Для вас важно, что: 1) В программе на Си код символа можно получить с помощью одинарных ковычек '' Пример: Код:
вот два эквивалентных способа: Код:
Код:
Код:
Код:
|
11.02.2012, 11:33 | #10 | |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
В нашей программе мы получаем коды символов с помощью getchar(). Эта функция возвращает код символа или EOF если символы закончились. Найдите описание функции в приложении Б (K&R), подраздел 1.4 "Функции ввода-вывода символов". (Не бойтесь заглядывать вперёд и проводить "разведку местности"). Есть ещё сайт по С/С++ cplusplus.com. Введите в поиске (на сайте cplusplus.com) getchar. Первая ссылка ваша. Переведите всё, что написано о getchar(). Не важно, что с первого раза не поймёте, просто сделайте это.
Цитата:
Я приводил следующий код, он и здесь к месту: Код:
P.S.S. Не стесняйтесь задавать любые вопросы. Будем вместе разбираться |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программированием С++ | USB_ZVER | Visual C++ | 0 | 31.01.2012 21:16 |
Что случилось с программированием? | Ozerich | Свободное общение | 42 | 19.03.2010 23:31 |
Проблемы с программированием на C | whyer | Помощь студентам | 4 | 08.08.2009 22:17 |
Помогу с программированием | Lokuson | Фриланс | 1 | 25.01.2009 11:34 |
Твердо решил занятся программированием | vitis | Помощь студентам | 2 | 28.10.2008 21:51 |