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

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

Войти
Регистрация
Восстановить пароль
 
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
#1

Потоки ввода / вывод - C++

29.03.2013, 19:13. Просмотров 395. Ответов 3
Метки нет (Все метки)

Почему вот такая функция, при ifp = stdin читает символы пока они не кончатся в stdin.

C++
1
2
3
4
5
6
void filecopy(FILE *ifp, FILE *ofp){
    int c;
 
    while( (c = getc(ifp)) != EOF)
        putc(c, ofp);
}
А при таком вызове:

C++
1
getc(stdin)
при пустом stdin вместо возврата EOF программа ожидает символ?

Добавлено через 6 минут
Вот на таком примере давайте разберёмся. При первом вызове функции getc программа ожидает ввода, так как stdin пустой. Но при вызове функций getc в цикле, когда stdin становится пустым, программа не ожидает ввода, а возвращает EOF. Почему так происходит?

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <stdlib.h>
 
int main(void){
    int ch;
 
    ch = getc(stdin);
    while(ch != EOF){
        putc(ch, stdout);
        ch = getc(stdin);
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2013, 19:13     Потоки ввода / вывод
Посмотрите здесь:

Потоки ввода-вывода - C++
1) Типы данных, для которых перегружены операторы форматного ввода-вывода.

Потоки ввода-вывода в С++ - C++
Ребят, нужна помощь В программирование я новичок, но сдать нужно 1. Написать программу, печатающую символы. Использовать цикл while....

Используя потоки ввода/вывода в С++ - C++
Здравствуйте помогите организовать запись информации из массива объектов в класс, чтение данной информации из класса, ввод информации с...

Игнорируются потоки ввода cin - C++
Здравствуйте! У меня такая проблема: в консольном приложении на C++ игнорируются некоторые потоки ввода cin. А если я введу какие-либо...

Непонятная ошибка. Потоки ввода/вывода - C++
Решал задачу и столкнулся с проблемой (первый день на c++ &quot;пишу&quot;) не пойму что за ошибка #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Текстовые файлы и потоки ввода/вывода - C++
Доброго времени суток. Уважаемый гуру, не могли бы вы мне помочь с решением данной программы. Алгоритм знаю, но никак не могу его...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Catstail
Модератор
22514 / 10919 / 1774
Регистрация: 12.02.2012
Сообщений: 18,067
29.03.2013, 19:13     Потоки ввода / вывод #2
Цитата Сообщение от bgm123 Посмотреть сообщение
пока они не кончатся в stdin.
- мне кажется, чтобы символы в stdin "кончились", нужно ввести CTRL-Z и Enter. Если этого не сделать, функция filecopy тоже будет ждать.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
29.03.2013, 19:33     Потоки ввода / вывод #3
Цитата Сообщение от bgm123 Посмотреть сообщение
Почему вот такая функция, при ifp = stdin читает символы пока они не кончатся в stdin.
Потому что вы сами в цикле написали пока не конец файла.
Цитата Сообщение от bgm123 Посмотреть сообщение
при пустом stdin вместо возврата EOF программа ожидает символ?
Ожидание происходит.
Цитата Сообщение от bgm123 Посмотреть сообщение
программа не ожидает ввода, а возвращает EOF. Почему так происходит?
Она читает из буфера. Попробуйте вызвать ее в конце еще раз
Цитата Сообщение от bgm123 Посмотреть сообщение
while(ch != EOF){
* * * * putc(ch, stdout);
* * * * ch = getc(stdin);
* * }
После этого цикла еще раз getc(stdin);

Добавлено через 5 минут
Цитата Сообщение от go Посмотреть сообщение
После этого цикла еще раз getc(stdin);
Вызов 1 и из буфера он прочитает 1 раз. Но можно ввести буфер их много (до энтера, включая его).
Цитата Сообщение от bgm123 Посмотреть сообщение
Почему вот такая функция, при ifp = stdin читает символы пока они не кончатся в stdin.
Вы меня запутали. Работы этих функций аналогичная.

Цитата Сообщение от bgm123 Посмотреть сообщение
Почему вот такая функция, при ifp = stdin читает символы пока они не кончатся в stdin.
И что она ждать не будет?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2013, 06:58     Потоки ввода / вывод
Еще ссылки по теме:

Очередной по getline() или потоки ввода - C++
Всем привет! :drink: Ребятки, такая трабла, прога добавляет студентов в группу, при добавлении 2го студента ф-ция getline() непонятно для...

Переделать потоки ввода-вывода на prinf и scanf - C++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; int x,y,i,j,n1,m1,n2,m2,z; void cret(void) { cout&lt;&lt;&quot;\nVvedit...

Запустить интерпретатор bash, получить потоки ввода вывода - C++
Здравствуйте, мне необходимо в своей программе запустить интерпретатор bash, и получить стандартные потоки ввода/вывода, для того чтобы...

Потоки ввода/вывода: дважды скопировать исходный файл - C++
Когда пытаюсь побайтно копировать из одного файла в другой - всё работает. А вот если попытаться ДВА раза скопировать исходный файл , то...

Потоки ввода/вывода. Сохранение информации в файл и ее считывание оттуда - C++
Всем доброго времени суток. Неделю две назад я начал делать программу, которая бы сохраняла информацию о так называемых фирмах в текстовом...

Ввод-вывод, потоки - C++
Где лучше всего описано, как работает система вводы-вывода в C++ и что такое потоки? И желательно что-нибудь почитать про систему...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.03.2013, 06:58     Потоки ввода / вывод #4
Цитата Сообщение от bgm123 Посмотреть сообщение
Вот на таком примере давайте разберёмся. При первом вызове функции getc программа ожидает ввода, так как stdin пустой. Но при вызове функций getc в цикле, когда stdin становится пустым, программа не ожидает ввода, а возвращает EOF. Почему так происходит?
Вы как это проверяете?

Добавлено через 15 минут
Поток с консоли это не файл, нет там EOF. Его нужно генерировать, поэтому никаких выходов из циклов, при чтении с консоли, ни в первом коде, ни во втором нет, пока не сгенерирован EOF. getc(stdin) будет считываеть всё из буфера и ждать следующего ввода.
Yandex
Объявления
30.03.2013, 06:58     Потоки ввода / вывод
Ответ Создать тему
Опции темы

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