|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.11.2011, 01:19 | #1 |
Пользователь
Регистрация: 04.07.2011
Сообщений: 16
|
функция на Си: работает, но не понятно как
в небольшой учебной программке не до конца понятно как работает функция getWord(): ведь за один вызов она возвращает указатель на одно слово? но это слово - все маленькие латинские буквы во входном потоке, а функция за один вызов выдает только часть, например, где строка обрывается пробелом, цифрой или другим символом - не буквой латинского алфавита. а со следующим вызовом выдает следующую часть строки. например, если набрать "asd123dsa2www", программа напечатает
asd dsa www кто нибудь, плиз, объясните, каким образом в pWord попадают "кусочки" строки. прошу прощения, если не очень понятно спросил. вот код: Код:
|
28.11.2011, 01:45 | #2 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Во-первых, программа содержит ошибки. например, в ней происходит "утечка памяти", то есть выделяется память в динамической области памяти, но она не освобождается.
Теперь, что касается работы функции. Алгоритм ее следующий. Она последовательно считывает символы входного потока. Проверяет, является ли символ латинской буквой. Если является, то сохраняет его в символьном окальном массиве. Если встретилась не буква латинского алфавита, то в программе выдяется память в динамической области памяти, туда копируется локальный символьный массив, и адрес выделенной памяти возвращается в вызывающую программу. Ежели во входном потоке встретилась не буква латинского алфавита, то делается проверка по длине уже заполненной части локального массива, имеет ли он сохраненные символы? если имеет, то считается, что было считано слово. Ежели пока локальный массив пуст, продолжается чтение из символьного потока и все символы, которые не являются буквами латинского алфавита, пропускаются.
Со мной можно встретиться на www.clipper.borda.ru
|
28.11.2011, 03:02 | #3 | |
Пользователь
Регистрация: 04.07.2011
Сообщений: 16
|
Цитата:
Код:
|
|
28.11.2011, 09:15 | #4 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Вызвал ты в цикле считку строки, ввел в строку символы, при каждом вводе символов прога анализирует - буква это или нет. Как только попадается введенная небуква getWord выходит из своего цикла, прокручивая операцию puts(word); - вывод считанного на экран. А поскольку она сама помещена в цикл : Цитата:
На экране создается эффект интерактивности, ибо программа на лету проводит анализ введенного.
I'm learning to live...
|
||
28.11.2011, 10:11 | #5 |
Пользователь
Регистрация: 04.07.2011
Сообщений: 16
|
прошу прощения за настойчивость: никак не пойму алгоритма этой хитрозадости - при новом вызове функция должна вроде бы сначала читать введенную строку? но этого не происходит.
|
29.11.2011, 01:29 | #6 |
Пользователь
Регистрация: 04.07.2011
Сообщений: 16
|
к сожалению, я так и не разобрался с этой функцией ((
в смысле не получается ясно представить её работу. что ж, может, со временем... |
29.11.2011, 10:29 | #7 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Другое дело что функция при вызове думает что вводится новая строка, и начинает наполнять переменную word с начала.
I'm learning to live...
|
|
29.11.2011, 23:03 | #8 | |
Пользователь
Регистрация: 04.07.2011
Сообщений: 16
|
Цитата:
Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не понятно по каким причинам не работает защита от дурака | axell24 | Помощь студентам | 4 | 29.10.2011 08:18 |
Как работает префикс функция ? | videolord | Общие вопросы по Java, Java SE, Kotlin | 4 | 15.04.2011 17:17 |
Не понятно как работает программа на рекурсию. | Kroleg | Помощь студентам | 1 | 26.03.2011 18:06 |
Как работает функция number_format? | Nikirinka | PHP | 4 | 08.01.2011 16:50 |
Объясните, как работает функция strlen() | TheWanderer | Общие вопросы C/C++ | 9 | 25.11.2008 22:46 |