Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 04.12.2018
Сообщений: 66
1

Eof

03.01.2020, 05:13. Показов 1748. Ответов 13
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Собственно не могу отловить вывод количества символов из потока,
т.к. при достижении конца файла происходит выход из программы и функция вывода почему-то игнорируется.
CTRL+Z выход из программы и игнорирование функции вывода, может не та комбинация?
Миниатюры
Eof  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.01.2020, 05:13
Ответы с готовыми решениями:

!=EOF
В книге дается пример для подсчета символов #include<stdio.h> main() { long nc; nc=0;...

EOF
Здравствуйте. Подскажите, пожалуйста, как сделать, чтобы программа работала, пока не будет EOF. То...

EOF
Как обычно, я считаю слова из букв i,v,... Ввод посимвольный #include <stdio.h> void main() {...

EOF, ctrl+z
Вот код, который выводит входной поток по одному слову в строке, если словом считать...

13
136 / 90 / 48
Регистрация: 16.08.2016
Сообщений: 362
03.01.2020, 09:11 2
Слишком быстро закрывается окно командной строки? Добавьте getchar() перед выходом из функции main до return
0
0 / 0 / 0
Регистрация: 04.12.2018
Сообщений: 66
03.01.2020, 21:57  [ТС] 3
Vadim Borisov,
Миниатюры
Eof  
0
0 / 0 / 0
Регистрация: 04.12.2018
Сообщений: 66
04.01.2020, 01:58  [ТС] 4
CTRL + D + Enter
0
136 / 90 / 48
Регистрация: 16.08.2016
Сообщений: 362
04.01.2020, 04:37 5
Попробуйте объявить переменную например int c, и в условии while прописать так
C
1
while((c=getchar()) != EOF)
0
Вездепух
Эксперт CЭксперт С++
12759 / 6643 / 1787
Регистрация: 18.10.2014
Сообщений: 16,799
04.01.2020, 04:41 6
Цитата Сообщение от VENtura12 Посмотреть сообщение
Vadim Borisov,
Ну так что ж вы творите? Вы просто убиваете свою программу своим ^C. О каком выводе количества символов может идти речь?

А ^Z останавливает ее и отправляет в фон. Тоже, разумеется, никакого вывода не будет.

Зачем вы жмете ^C и ^Z?
0
2319 / 1143 / 705
Регистрация: 25.04.2016
Сообщений: 3,286
04.01.2020, 04:53 7
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main (void) {
    int c;
    long nc = 0;
 
    printf(":> ");
    while ( (c=getchar()) != EOF && c != '\n' )
        nc++;
    printf("nc = %ld\n", nc);
 
    printf("\n\nPress Enter..");
    getchar();
    return 0;
}
0
Вездепух
Эксперт CЭксперт С++
12759 / 6643 / 1787
Регистрация: 18.10.2014
Сообщений: 16,799
04.01.2020, 06:36 8
Цитата Сообщение от VENtura12 Посмотреть сообщение
CTRL + D + Enter
При посимвольном чтении не нужно никакого Enter.
0
4001 / 2548 / 428
Регистрация: 09.09.2017
Сообщений: 11,293
04.01.2020, 07:35 9
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
При посимвольном чтении не нужно никакого Enter.
Введенная строка хранится в буфере пока не нажмут Enter и не передадут его программе.
0
Вездепух
Эксперт CЭксперт С++
12759 / 6643 / 1787
Регистрация: 18.10.2014
Сообщений: 16,799
04.01.2020, 08:22 10
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Введенная строка хранится в буфере пока не нажмут Enter и не передадут его программе.
Введенная строка хранится в буфере пока не нажмут Enter или пока не нажмут Ctrl-D и тем самым не передадут его программе. Как я уже подробнейше объяснял здесь в Unix-подобных терминалах комбинация Ctrl-D - это прямая команда терминалу передать буфер программе.
0
0 / 0 / 0
Регистрация: 04.12.2018
Сообщений: 66
04.01.2020, 12:06  [ТС] 11
Vadim Borisov, TheCalligrapher, да, оппечатка, вы изучали Си случайно не по Ричи?
0
4001 / 2548 / 428
Регистрация: 09.09.2017
Сообщений: 11,293
05.01.2020, 11:02 12
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Введенная строка хранится в буфере пока не нажмут Enter или пока не нажмут Ctrl-D
Оно что, только в начале строки работает как EOF, а в середине только как передача буфера?
Ввожу строку через fgets или scanf. Если строка пустая, достаточно одного ^D, если есть хоть один символ - нужно жать два раза. То же самое с getchar().
0
Вездепух
Эксперт CЭксперт С++
12759 / 6643 / 1787
Регистрация: 18.10.2014
Сообщений: 16,799
05.01.2020, 12:43 13
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Оно что, только в начале строки работает как EOF, а в середине только как передача буфера?
Ctrl-D само по себе не имеет никакого отношения к EOF. Ctrl-D - это всегда просто принудительная передача буфера и больше ничего.

А дальше уже начинаются дополнительные POSIX соглашения: если полученный от терминала буфер пуст, то это расценивается, как EOF. То есть при помощи Ctrl-D ситуация EOF создается косвенным образом: при помощи Ctrl-D вы можете принудительно передать пустой буфер, что, согласно соглашениям POSIX, говорит о конце файла.

То есть для создания ситуации EOF нажимать Ctrl-D нужно именно при пустом буфере терминала, т.е. в начале буфера, а не обязательно в начале строки.

Например, если вы читаете данные при помощи функции fgets, то Ctrl-D в начале строки сразу создаст ситуацию EOF, потому что буфер терминала в это время еще пуст. Однако если вы уже что-то набрали в строке, т.е. не находитесь в начале строки, то вы можете создать ситуацию EOF, нажав Ctrl-D два раза. Именно два раза.

Первое нажатие Ctrl-D просто принудительно протолкнет буфер терминала на выход, но не создаст EOF и не завершит fgets. fgets после этого не завершается (если не достигнут лимит), она захочет продолжить чтение текущей строки: она сделает новый запрос на данные с уже "свежим" пустым буфером терминала. Второе нажатие Ctrl-D сразу протолкнет этот пустой буфер терминала на выход, тем самым создав ситуацию EOF.

Вот именно поэтому при непустой строке приходится жать Ctrl-D два раза.
1
4001 / 2548 / 428
Регистрация: 09.09.2017
Сообщений: 11,293
05.01.2020, 19:13 14
Спасибо
0
05.01.2020, 19:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.01.2020, 19:13
Помогаю со студенческими работами здесь

Не считывается EOF
Добрый вечер господа, написал программу которая считывает последовательность чисел (номер и...

Как работает EOF?
Изучаю С по книге Кернигана. И тут вот пример вот такой #include &lt;stdio.h&gt; //Подсчет символов...

Ввод EOF с клавиатуры
int c while((c=getchar())!=EOF) {операторы} программа будет выполнятся до окончания потока или...

Почему EOF равно -1?
#include &lt;stdio.h&gt; /* программа для вывода значения константы EOF */ main() { printf(&quot;%d\n&quot;,...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru