0 / 0 / 0
Регистрация: 04.12.2018
Сообщений: 66
|
|
1 | |
Eof03.01.2020, 05:13. Показов 1748. Ответов 13
Собственно не могу отловить вывод количества символов из потока,
т.к. при достижении конца файла происходит выход из программы и функция вывода почему-то игнорируется. CTRL+Z выход из программы и игнорирование функции вывода, может не та комбинация?
0
|
03.01.2020, 05:13 | |
Ответы с готовыми решениями:
13
!=EOF EOF EOF EOF, ctrl+z |
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,
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 прописать так
0
|
Вездепух
12759 / 6643 / 1787
Регистрация: 18.10.2014
Сообщений: 16,799
|
|
04.01.2020, 04:41 | 6 |
Ну так что ж вы творите? Вы просто убиваете свою программу своим
^C . О каком выводе количества символов может идти речь? А ^Z останавливает ее и отправляет в фон. Тоже, разумеется, никакого вывода не будет.Зачем вы жмете ^C и ^Z ?
0
|
2319 / 1143 / 705
Регистрация: 25.04.2016
Сообщений: 3,286
|
||||||
04.01.2020, 04:53 | 7 | |||||
0
|
Вездепух
12759 / 6643 / 1787
Регистрация: 18.10.2014
Сообщений: 16,799
|
|
04.01.2020, 06:36 | 8 |
0
|
4001 / 2548 / 428
Регистрация: 09.09.2017
Сообщений: 11,293
|
|
04.01.2020, 07:35 | 9 |
Введенная строка хранится в буфере пока не нажмут Enter и не передадут его программе.
0
|
Вездепух
12759 / 6643 / 1787
Регистрация: 18.10.2014
Сообщений: 16,799
|
|
04.01.2020, 08:22 | 10 |
Введенная строка хранится в буфере пока не нажмут
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 |
Оно что, только в начале строки работает как EOF, а в середине только как передача буфера?
Ввожу строку через fgets или scanf. Если строка пустая, достаточно одного ^D, если есть хоть один символ - нужно жать два раза. То же самое с getchar().
0
|
Вездепух
12759 / 6643 / 1787
Регистрация: 18.10.2014
Сообщений: 16,799
|
|
05.01.2020, 12:43 | 13 |
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 | |
05.01.2020, 19:13 | |
Помогаю со студенческими работами здесь
14
Не считывается EOF Как работает EOF? Ввод EOF с клавиатуры Почему EOF равно -1? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |