Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
#1

Почему putchar() выводит всю строку? - C++

01.11.2012, 20:27. Просмотров 467. Ответов 9
Метки нет (Все метки)

У К&Р есть такой пример:
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>                                                                                                                      
                                                                                                                                        
main()                                                                                                                                  
{                                                                                                                                       
    int c;                                                                                                                              
                                                                                                                                        
    while( ( c = getchar()) != EOF )                                                                                                    
        putchar(c);                                                                                                                     
                                                                                                                                        
}
Собственно, почему отображает всю строку не понятно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2012, 20:27     Почему putchar() выводит всю строку?
Посмотрите здесь:

Объяснить почему указатель выводит всю строку сразу, а не адрес первого элемента - C++
Всем привет :) Начал изучать сей замечательный язык и появились кое-какие вопросы к гуру! Запутался в указателях... ...

Почему функция putchar(); выводит только первый символ?(Короткий код) - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; int main() { int c; c=getchar(); putchar(c); getch(); }

Массив: Почему выводит все в строку? - C++
Почему выводит все в строку? #include &lt;iostream&gt; #include &lt;stdio.h&gt; using namespace std; #define N 2 #define M 3 int A,...

Почему выводит еще одну строку, равную 0? - C++
2. Дана целочисленная квадратная матрица. Определить: • сумму элементов в тех столбцах, которые не содержат отрицательных элементов; ...

Почему последнюю строку из файла выводит дважды? - C++
привет всем! скажите пожалуйста почему последнюю строку выводит 2 раза? FILE *f; if(!(f = fopen(&quot;keys.txt&quot;,&quot;r&quot;))) ...

Найти в матрице строку с наименьшим числом на главной диагонали, и исключить всю строку - C++
Условие задачи : матрицу заполнить случайными значениями , найти в ней строку с наименьшим числом в главной диагонали и исключить всю...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
01.11.2012, 21:26     Почему putchar() выводит всю строку? #2
ну так правильно, он и должен отображать всю строку.
putchar() выводит 1 символ, но так как он в этом цикле, то он посимвольно выводит всю строку
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
01.11.2012, 22:04  [ТС]     Почему putchar() выводит всю строку? #3
Так и должно быть - ответ меня не удовлетворяет. А почему бы ему не отобразить только первый символ например?

Добавлено через 1 минуту
Хочу заметить, что он выводит всю строку ДО вызова функции getchar()
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
01.11.2012, 22:05     Почему putchar() выводит всю строку? #4
getchar() читает очередной символ из входного потока, putchar() выводит очередной символ (не сразу, конечно, если enter не нажать), чего тут не понятно, это же цикл.
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
01.11.2012, 22:14  [ТС]     Почему putchar() выводит всю строку? #5
Хорошо, вот как альтернативный вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>                                                                                                                      
                                                                                                                                        
main()                                                                                                                                  
{                                                                                                                                       
                                                                                                                                        
    int c;                                                                                                                              
                                                                                                                                        
    c = getchar();                                                                                                                      
    while( c != EOF ) {                                                                                                                 
        putchar(c);                                                                                                                     
        c = getchar();                                                                                                                  
    }                                                                                                                                   
                                                                                                                                        
}
По идее должно быть так:
До входа в цикл переменной с присваивается некое значение, выводится на экран при помощи функции putchar() один символ , далее управление передаётся следующему оператору, который присваивает новое значение переменной с, затем осуществляется проверка на условие и повторятся всё заного. Как видно цикл тут ни причём. Вопрос остаётся открытым.
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
01.11.2012, 22:20     Почему putchar() выводит всю строку? #6
должно ответить на все ваши вопросы:
Чтение и запись символов
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
01.11.2012, 22:37  [ТС]     Почему putchar() выводит всю строку? #7
Теперь понятно, дело не в putchar() (putchar читает первый символ из потока). Даже когда новые значения не поступают в буфер при помощи выражения c = getchar(); цикл while всё равно продолжает своё существование пока не выведет все значения хранящиеся в буфере.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.11.2012, 10:53     Почему putchar() выводит всю строку? #8
Цитата Сообщение от xtorne21st Посмотреть сообщение
putchar читает первый символ из потока
Из какого потока читает putchar()? putchar() записывает (помещает) в стандартный поток вывода символ, содержащийся в младшем байте переменной c. Вот getchar() действительно читает по символу из буфера потока ввода (в данном примере в цикле) в переменную с.

Добавлено через 11 минут
Цитата Сообщение от xtorne21st Посмотреть сообщение
Даже когда новые значения не поступают в буфер при помощи выражения c = getchar(); цикл while всё равно продолжает своё существование пока не выведет все значения хранящиеся в буфере.
Новые и не буду поступать, пока getchar() не считает из буфера все старые (там очередь). И цикл продолжает существование, во-первых, не пока "не выведет все значения, хранящиеся в буфере ", а пока не введёт (через getchar()) все значения из буфера (потом будет ждать ввода новых), во-вторых, пока не будет введён EOF.
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.11.2012, 16:13  [ТС]     Почему putchar() выводит всю строку? #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Цитата Сообщение от xtorne21st Посмотреть сообщение
putchar читает первый символ из потока
Из какого потока читает putchar()? putchar() записывает (помещает) в стандартный поток вывода символ, содержащийся в младшем байте переменной c. Вот getchar() действительно читает по символу из буфера потока ввода (в данном примере в цикле) в переменную с.
Опечатался...

Добавлено через 1 минуту
И что означает "в младшем байте"?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2012, 20:20     Почему putchar() выводит всю строку?
Еще ссылки по теме:

Как очистить всю строку? - C++
У меня есть строка, в этой строке я храню информацию, потом ее вывожу на экран. Как сделать так, чтобы эта строка стала пустой и можно было...

Как прочитать всю строку? - C++
TArray &lt;std::wstring&gt; Result; std::string Buffer; std::ifstream File; std::wcout&lt;&lt;&quot;Opening the project...

Считывает символьную строку с экрана, выводит в файл (.txt) данную строку, перевернув её(было 123, стало 321) - C++
Наткнулся на задачу, помогите решить: вводиться символьная строка, программа считывает строку и выводит её в файл(текстовой), перевернув...

Почему не выводит m? - C++
С начала суток прошло N секунд (N — целое). Найти количество полных минут, прошедших с начала суток. #include &lt;iostream&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.11.2012, 20:20     Почему putchar() выводит всю строку? #10
Цитата Сообщение от xtorne21st Посмотреть сообщение
И что означает "в младшем байте"?
Переменная с это int, т.е. несколько байтов (4), putchar() выводит содержимое (в виде символа) именно младщего байта.
Yandex
Объявления
02.11.2012, 20:20     Почему putchar() выводит всю строку?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru