- Не срабатывает EOF в программе
- Не работает условие !EOF.
- Re: Не работает условие !EOF.
- Re: Не работает условие !EOF.
- Re: Re: Не работает условие !EOF.
- Re: Re: Re: Не работает условие !EOF.
- Re: Re: Re: Re: Не работает условие !EOF.
- Re: Re: Re: Re: Не работает условие !EOF.
- Re: Re: Re: Re: Re: Не работает условие !EOF.
- Re: Re: Re: Re: Re: Re: Не работает условие !EOF.
- Re: Re: Re: Re: Re: Re: Re: Не работает условие !EOF.
- Не работает eof(). о__О
- почему eof () не работает так, как я ожидаю?
- Решение
- Другие решения
- Си: проблема с getchar() и EOF(^Z) в Windows консоли
- 1 ответ 1
Не срабатывает EOF в программе
Помощь в написании контрольных, курсовых и дипломных работ здесь.
EOF срабатывает только после 2-х комбинаций ctrl+Z
EOF в функции getline срабатывает только после 2-х комбинаций ctrl+Z. Подскажите, пожалуйста, как.
Почему не срабатывает EOF
У меня стоит Visual Studio 2010 написал простенькую программу #include «stdafx.h» #include.
Когда и как срабатывает eof() ?
Программа: #include #include #include #include .
Не срабатывает условие while (!file.eof()
Есть функция, которая считает из файла числа в динамический массив: int* ReadFile(string FileName).
Я печатаю в каждой строке по символу этих строк у меня 5 при достижение EOF должно вывести число 5. Вопрос что я не нажимаю не происходит срабатывание EOF в программе while((k = getchar()) != EOF) вставил данный код одно и тоже
Добавлено через 1 минуту
Все правилньо и нечего не происходит либо я что то делаю не так у меня печатает когда я нажимаю ctrl+z вот такую ересь ^Z
Добавлено через 1 минуту
тоесть либо программа не воспринимает мой ввод символа ctrl+z либо что то еще я не могу понять
Добавлено через 2 минуты
EOF = end of file — это литерал, который указывает на окончание файла..что—то я не вижу, что бы вы читали из файла. да я не читаю из файла я просто ввожу в диалоговом окне символы и новую строку. но пример в книге такой я так понимаю что знаичт они ошиблись либо я чего то не понимаю
Источник
Не работает условие !EOF.
#ifdef HAVE_CONFIG_H
#include
#endif
#include
#include
#include
#include
#include
using namespace std;
int main(int argc, char *argv[])
<
char s;
char file_name[] = «/home/alexandr/Desktop/.directory»;
int file = open (file_name,O_RDONLY);
while (!EOF)
<
read(file, &s, sizeof(s));
cout
Re: Не работает условие !EOF.
А ты подумай внимательно — а что такое это EOF
Re: Не работает условие !EOF.
Re: Re: Не работает условие !EOF.
infinite loop??
перевожу
while(!0) <.
Re: Re: Re: Не работает условие !EOF.
#include //Необходимо для работы системной функции открытия файлов
#include //Необходимо для работы системной функции чтения файлов
#include //необходим для cout
int main (int argc, char* argv[])
<
tagBITMAPFILEHEADER fh;
tagBITMAPINFOHEADER ih;
tagRGBQUAD p;
int from = open (argv[1],O_RDONLY);
int to = open (argv[2],O_RDWR | O_CREAT);
вот почему я спрашиваю, сдесь всё работает.
А в моём случае не работает. Почему?!
Re: Re: Re: Re: Не работает условие !EOF.
А что «все»? Если EOF определен как -1, то цикл while никогда не выполняется и программа сразу выходит на return.
Если все-таки тебе интересно отлавливать конец файла, то
int bytes_read = 0;
do<
bytes_read = read(from,&p,4);
write(to,&p,4);
>while(bytes_read > 0);
EOF здесь совсем никчему. Он используется при работе с функциями потоков (FILE*) а у тебя — низкоуровневый ввод-вывод через дескрипторы.
Вообще info glibc, man read, man write — там все написано.
Re: Re: Re: Re: Не работает условие !EOF.
take a look at BMP.h ?
Re: Re: Re: Re: Re: Не работает условие !EOF.
#pragma pack(push,1) //для чтения необходимо выравнивение, с сохранением его текущегозначения
typedef unsigned long DWORD; // Двойное слово — 32 бита (разряда)
typedef unsigned short WORD; // Слово — 16 бит (разрядов)
typedef signed long LONG;
typedef unsigned int UINT;
// Заголовок файла
typedef struct tagBITMAPFILEHEADER
<
WORD bfType; // ‘BM’ = 4D42h
DWORD bfSize;
UINT bfReserved1;
UINT bfReserved2;
DWORD bfOffBits; // Смещение к растру
>;
// Заголовок Bitmap
typedef struct tagBITMAPINFOHEADER
<
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
>;
//структура пиксела
typedef struct tagRGBQUAD
<
char r;
char g;
char b;
char a;
>;
#pragma pack(pop) //восстановление значения выравнивания
Ну ладно пусть, Спасибо!
Re: Re: Re: Re: Re: Re: Не работает условие !EOF.
Как я понимаю, это хедер BMP.h — по всему видно, что для виндовса писано. Наверное и пример твой тоже от туда. Я в виндовсе не большой спец и не знаю, что EOF там означает (макрос?), но в Линуксе это просто константа, равная -1. Чтобы определить конец файла нужно смотреть на возвращаемое значение функции read. Смотри пост от lg и читай man:
cyclon@cyclop> man 2 read
Re: Re: Re: Re: Re: Re: Re: Не работает условие !EOF.
EOF это EndOfFile во всех блин стандартах касающихся СИ. И от ОСи никак не зависит.
Источник
Не работает eof(). о__О
в такой вот ситуации возвращает всегда ноль. даже в данном случае, когда на e: лежит чистый файл.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Не работает while (!***.eof() !
Здравствуйте, задание такое: Вводить с клавиатуры данные и записывать их в файл в виде Имя .
Не работает EOF (end-of-file)
EOF (end-of-line) не работает в условии завершения цикла. Вместо него работает -1. Если ввести -1.
Eof() работает на 1 итерацию больше, чем нужно
Работаю с чтением/записью в файл прямого доступа Сперва записываю в пустой файл объект структуры.
Добрый день. Вопрос по теме.
А что если eof==-1 определяется где-то посреди файла? Например картинки достаточно большие фиг дочитаешь до конца.
Код:
Такая же кстати фишка происходит, если код:
Прочитать символы из файла, используя eof() (программа работает не так, как ожидается)
Здравствуйте, мне нужно прочитать символы из файла(желательно с пробелами). Использую eof(), но.
Не работает while not eof(f)
Добрый день у меня есть программа с использованием файла. программа так то работает, НО когда мы.
Как работает EOF?
Изучаю С по книге Кернигана. И тут вот пример вот такой #include //Подсчет символов.
Не работает eof почему-то в одном месте программы
Программа должна скопировать исходный текстовой файл в результирующий, при этом заменив все.
Источник
почему eof () не работает так, как я ожидаю?
и мой input.txt выглядит так:
медведь: SDF 23 хорошо, я в порядке 11q, 45
и мой вывод на экран выглядит так:
Так что здесь произошло? почему 45 считается одним из файлов. И если я сразу добавлю «45» рядом с 45, на экране появятся две буквы, а не одна.
Решение
Проблема заключается в том, что при извлечении символов для 45 он пытается извлечь символ после ‘5’ (чтобы проверить, будет ли число продолжать дальше) и видит конец файла, устанавливая eofbit , Это делает in.good() тест провалиться Предложения:
Помните, .good() это не то же самое, что проверка состояния потока. .good() говорит, готов ли поток к в дальнейшем вход. Bool преобразование делает ! .fail() и проверяет, если прошлой операция была выполнена успешно
Другие решения
Что ж, « eof() » делает работать, как и ожидалось, по крайней мере, так, как я ожидаю, что он будет работать: он устанавливается, когда поток каким-то образом касается конца файла. Если последняя строка вашего файла на самом деле заканчивается ‘5’ вместо новой строки чтение целого числа останавливается из-за прикосновения к новой строке и std::ios_base::eofbit устанавливается поскольку std::ios::good() возвращается false если установлен какой-либо бит, включите std::ios_base::failbit последнее значение не будет напечатано.
В общем, eof() чаще используется не по назначению. По сути, единственное разумное использование eof() чтобы убедиться, что весь поток был использован или подавить сообщение об ошибке, если eof() устанавливается так, как ожидается, что ввод завершится неудачно в конце потока. Кроме того, как правило, мало std::ios::good() ,
Источник
Си: проблема с getchar() и EOF(^Z) в Windows консоли
Уже очень долгое время пытаюсь понять:
Почему цикл не завершается, если я введу «dfkjsdf^Z», в то время как при
«dfkjsdf (тут я нажимаю Enter) ^Z» — завершается? То есть, как сделать так, чтобы он вышел из цикла, если я нажимаю CTRL+Z до того, как нажму Enter
Это, пожалуй, самое непонятное для меня в языке Си. И сколько бы я не рылся в гугле, ответа все же найти не смог..
1 ответ 1
Это не имеет никакого отношения к языку С, а зависит только от алгорима обработки комбинации Ctrl + Z консолью Windows и интерпретацией результатов этой обработки той реализацией стандартной библиотеки, которую вы используете.
Ввод в Windows терминале буферизуется построчно. При этом обработка присутствующих в буфере символов ^Z следует довольно запутанному алгоритму (по крайней мере при использовании стантартной библиотеки из комплекта MSVC).
Комбинация Ctrl + Z сама по себе не вызывает «проталкивания» накопленного буфера на выход (в отличие от комбинации Ctrl + D в Linux). Она лишь добавляет во входной буфер символ ^Z , т.е. \x1a . Вы можете нажать Ctrl + Z несколько раз, помещая во входной буфер несколько символов ^Z . После этого вы можете продолжать вводить что-то еще. Чтобы все-таки послать накопленный буфер ожидающему процессу, придется нажать Enter .
Если входной буфер содержит какие-то символы до первого появления символа ^Z , то ожидающий ввода процесс увидит все эти символы, после чего процесс увидит один символ ^Z , т.е. \x1a . Это будет просто символ \x1a . Никакой ситуации «конец файла» при этом не возникнет. Однако остаток входного буфера (после первого символа ^Z ) процессу виден не будет, как будто его и не было.
То есть если вы введете в Windows терминале последовательность abc^Z^Zdef^Zghi и нажмете Enter , то на вход ваш процесс получит символы a , b , c и \x1a . Весь остальной ввод пропадет бесследно. Заметьте, что при этом «пропадает» и символ перевода строки, cгенерированный нажатием Enter .
Если входной буфер сразу же начинается с символа ^Z , то входной буфер считается пустым. Все его содержимое пропадает, не происходит даже чтения символа ^Z . Возникает ситуация «конец файла».
То есть если вы введете в Windows терминале последовательность ^Zdef и нажмете Enter , то на вход ваш процесс не получит вообще ничего. Вместо этого функция ввода сообщит вам, что наткнулась на конец файла.
Поэтому для того, чтобы создать в буферизованном консольном вводе ситуацию «конец файла» придется вводить ^Z в самом начале новой строки.
Если вам нужна посимвольная обработка входа, то можно предварительно отключить построчную буферизацию ввода
В таком варианте каждый введенный символ будет немедленно читаться вашей getchar() и символ ^Z будет немедленно интерпретироваться как конец файла.
Источник