Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2011, 22:19   #1
yura_zb
Пользователь
 
Аватар для yura_zb
 
Регистрация: 15.02.2011
Сообщений: 41
Счастье как здесь работает цикл "while();"

Код:
int sym;
while((sym=getchar())!='\n') {
putchar(sym);
putchar('*');
}
результат такой:
ввод: ABC [ENTER]
вивод: A*B*C*

Последний раз редактировалось yura_zb; 16.07.2011 в 22:21.
yura_zb вне форума Ответить с цитированием
Старый 16.07.2011, 22:39   #2
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от yura_zb Посмотреть сообщение
Код:
int sym;
while((sym=getchar())!='\n') {
putchar(sym);
putchar('*');
}
результат такой:
ввод: ABC [ENTER]
вивод: A*B*C*
Цикл работает пока пользователь не введет перевод строки...
Функция getchar() возвращает из стандартного потока stdin следующий символ. При чтении символа предполагается, что символ имеет тип unsigned char, который потом преобразуется в целый.
Функция putchar() записывает символ, содержащийся в младшем байте параметра ch, в стандартный поток вывода stdout.
Один символ читаем из потока ввода, а два символа записываем в поток вывода.
An1ka вне форума Ответить с цитированием
Старый 16.07.2011, 22:44   #3
yura_zb
Пользователь
 
Аватар для yura_zb
 
Регистрация: 15.02.2011
Сообщений: 41
По умолчанию

сначала полностью вводитса строка,а потом виводитса посимвольно строка из звьоздочками.А как putcharзнает какой символ вивисти??и как будет конец while?
yura_zb вне форума Ответить с цитированием
Старый 16.07.2011, 22:50   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

сначало символ сохраняется в переменную sym, а затем уже сравнивается с переводом строки.
ну и затем сохраненный символ и выводится.

и никаких "полностью строку там нет".
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.07.2011, 22:50   #5
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Вчитайся
Код:
while((sym=getchar())!='\n') {
Он при входе в каждую итерацию цикла делает sym=getchar(). Выход произойдёт как только sym станет равно '\n'.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 16.07.2011, 23:10   #6
yura_zb
Пользователь
 
Аватар для yura_zb
 
Регистрация: 15.02.2011
Сообщений: 41
По умолчанию

ну а как putchar(sym) знает какой символ вивисти???????
yura_zb вне форума Ответить с цитированием
Старый 16.07.2011, 23:19   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

перечитайте мой пост.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.07.2011, 23:21   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Почитайте книгу, Вы же даже азов не знаете. while - цикл, он повторяет действие, или, заключённый в фигурные скобки, блок действий, следующий за ним, до тех пор, пока условие, следующее после слова while, в скобках истинно.
Код:
while                      ((sym=getchar())!='\n')
  |                               |
ключевое слово                 условие
При этом, (sym = getchar()) считывает введённый с помощью клавиатуры символ, и сохраняет его в переменной sym. После чего, содержимое sym проверяется на равенство символу перевода строки('\n'), который был введён, когда Вы нажали Enter. Символы считываются последовательно, в порядке их написания. putchar - выводит символ на экран, в скобках указывается какой символ нужно вывести. Мы и указываем sym, переменную, которая хранит текущий считанный символ. Если всё равно не понятно, то читайте книгу, темы про переменные, функции и циклы.
netrino вне форума Ответить с цитированием
Старый 17.07.2011, 01:02   #9
TDrive
Пользователь
 
Регистрация: 22.07.2009
Сообщений: 95
По умолчанию

Цитата:
Сообщение от yura_zb Посмотреть сообщение
результат такой:
ввод: ABC [ENTER]
вивод: A*B*C*
это результат который нужно получить?
вам нужно с начало строчку сохранить в массиве а потом выводить 1 элемент массива - * - второй элемент массива - * - ...
в цикле с проверкой конца массива.
TDrive вне форума Ответить с цитированием
Старый 17.07.2011, 19:29   #10
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от yura_zb Посмотреть сообщение
Код:
int sym;
while((sym=getchar())!='\n') {
putchar(sym);
putchar('*');
}
результат такой:
ввод: ABC [ENTER]
вивод: A*B*C*
Дело в том, что функция getchar является буферизованной. Когда вы что-то набираете на клавиатуре, то этот ввод сначала помещается в буфер. Когда вы нажимаете клавишу Enter, то первый символ из этого буфера передается в переменную sym.

То есть, как вы сами указали, вы набрали строку

ABC [ENTER]

Эта строка поместилась в буфер, cвязанный с функцией getchar. Затем функция из этого своего буфера считывает по одному символ в переменную sym. Сравнивает его с символом конца строки '\n'. И если он не равен (а первым в вашем буфере будет символ 'A'), то выводит его в стандартный поток, то есть на экран, а после него следующей командой выводит '*'.

Кстати сказать, обычно getchar является макросом, в основе которого, если я не ошибаюсь, лежит другая функция fgetc.
Со мной можно встретиться на www.clipper.borda.ru

Последний раз редактировалось Сыроежка; 17.07.2011 в 19:58.
Сыроежка вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как "повесить " передачу данных из формы на событие нажатия кнопки типа "button" ? vedro-compota JavaScript, Ajax 10 14.12.2010 21:05
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
"ОКРВВЕРХ", "ОКР", "ЕСЛИ". Как бы их связать. Каравай Microsoft Office Excel 13 17.02.2010 09:53
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04