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

Конец файла - C++

Восстановить пароль Регистрация
 
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
12.07.2013, 14:15     Конец файла #1
Почему, если я считываю текстовый файл:

C++
1
2
3
4
5
FILE *fp = fopen("123.txt", "rb+");
    
    while(!feof(fp))
        putchar(getc(fp));
    fclose(fp);
то при окончании символов в файле цикл завершается, а вот при считывание данных из файла stdin:
C++
1
2
3
while(!feof(stdin))
        putchar(getc(stdin));
    fclose(fp);
несмотря на то, что в stdin нет символов, C++ ждёт пока я его наберу, а не завершает цикл?

Добавлено через 57 секунд
up...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kventin_zhuk
БНТУ ФИТР
 Аватар для kventin_zhuk
214 / 154 / 15
Регистрация: 26.12.2012
Сообщений: 382
12.07.2013, 14:30     Конец файла #2
bgm123, предположу - что после getc в stdin записывается символ '\n' - из-за этого он постоянно не пуст.
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
12.07.2013, 14:38  [ТС]     Конец файла #3
Вот ниже screen shot. Я ввел символы 0123 и нажал Enter. Он мне показал коды этих символов. После чего продолжил ожидание ввода. Значит там нет символа?
Миниатюры
Конец файла  
kventin_zhuk
БНТУ ФИТР
 Аватар для kventin_zhuk
214 / 154 / 15
Регистрация: 26.12.2012
Сообщений: 382
12.07.2013, 14:44     Конец файла #4
bgm123, как раз-таки есть. записали 1 + символ конца строки => буфер не пуст. Вывели 1 символ. Второй остался в stdin. Снова один считали один символ - один остался в нем. Получается что stdin постоянно не пуст - а то что считали с него - то и вывели Но не уверен на 100%
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
12.07.2013, 14:48  [ТС]     Конец файла #5
Так символ перехода на новую строку тоже считался. Смотрите фото. Код последнего символа - 10.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
12.07.2013, 14:51     Конец файла #6
bgm123, и как по-вашему машина должна догадаться, что вы больше не собираетесь вводить символы? (попробуйте скормить в поток Ctrl+D)
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
12.07.2013, 15:02  [ТС]     Конец файла #7
ctrl + z в windows работает, это да. Но как система определяет, что пока не конец?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2013, 15:23     Конец файла
Еще ссылки по теме:

C++ Записать в конец файла
C++ конец файла C++
C++ Запись в конец файла

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

Или воспользуйтесь поиском по форуму:
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
12.07.2013, 15:23     Конец файла #8
Никак. Система не знает и не может знать, с какой скоростью оператор жмет на клавиши. Поэтому она просто ждет Ctrl+Z.
Yandex
Объявления
12.07.2013, 15:23     Конец файла
Ответ Создать тему
Опции темы

Текущее время: 03:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru