Другие языки программирования и технологии

EOF си

// ConsoleApplication23.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include
/* копирование ввода на вывод; 1-я версия */
int main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
Как выйти из цикла с консоли? Зачем вообще этот EOF тогда нужен?
Вот хорошее разъяснение на форуме по поводу этого EOF.
http://forum.sources.ru/index.php?showtopic=316994&view=findpost&p=2737586
---------
Краткий пересказ:
Так как консоль не входит в стандарты языка, то EOF для консоли разные компиляторы и операционные системы делают по разному.
В виндоус вообще-то CTRL-Z с последующим Enter, но если программа сделана в Visual Studio (как у Вас), то это ctrl-z надо вводить с новой строки, а если в Borland Builder, то можно в любом месте строки.
---------
Полная цитата:
"Консоль не является частью языка. Её поведение определяется собственными Стандартом, который не декларирует для неё понятия "конец файла". В DOS/Windows текстовые файлы (уже давно устаревшее соглашение, впрочем) оканчивались спец-символом SUBstitute, который с кодом 0x1A. Для единообразия этот символ, будучи введённым с консоли, так же рассматривается как EndOfFile. В POSIX консоль ведёт себя иначе. Это даже банально на Wiki написано.
Разные компиляторы по-разному обрабатывают текстовые и бинарные файлы. Точнее, не компиляторы, а поставляемые с ними библиотеки. Так, для текстовых файлов библиотеки предобрабатывают ввод и постобрабатывают вывод, для бинарных потоки данных идут один в один. Консоль "состоит" из двух (основных) "файлов" - ввода и вывода. И они по дефолту открываются как текстовые.
Определение конца файла не является задачей ОС. Она в общем случае не знает, как обрабатывается файл программой, на каком языке она написана, какие соглашения по работе с файлами, и в частности с консолью, в нём приняты, в каком режиме открыт, итп. Всё, что на может, это вернуть столько, сколько возможно, и выставить состояние (не) успеха. Остальное - задача библиотек.
Библиотеки VC обращают внимание на Ctrl-Z, считая их концом данных, но если он встречается не в начале ввода (как известно, консольный ввод обычно буферизируется построчно), то это не считается концом файла, а только концом текущей порции данных. Остальная часть строки отбрасывается. Честно говоря, не знаю, зачем так было сделано. Возможно, что это и баг. Только если Ctrl-Z встречается в начале строки, это принимается за конец файла. Библиотеки же BC, к примеру, всегда считают Ctrl-Z концом файла, независимо от того, где он попался. "
(С) Qraizer, forum.sources.ru
---------
Александр Андреев
Александр Андреев
21 729
Лучший ответ
Стандартно: CTRL-Z.
Это и будет конец файла.
есть такая команда break;
Попробуй, вдруг поможет
Djan Melikov
Djan Melikov
1 692
Djan Melikov Ну иди так:
while (((с=getchar()) != '1'))

только вначале библиотеку включи и дай понять, что 1 - конец файла.
#define eof '1'

Тогда для окончания файла у тебя будет использоваться символ "1"