русский
Germany.ruForen → Архив Досок→ Webdesign und Hosting

EOF

94  
ойМОЛОДой NightRider31.03.06 08:36
ойМОЛОДой
NEW 31.03.06 08:36 
День добрый!
Возникла проблемка. Считывал файл с русским текстом. В С++ код примерно такой:
FILE *infile;
char c;
infile = fopen ("file.txt" , "rt");
if (infile != NULL)
{
do {
c = fgetc (infile);
...
}
while (c != EOF);
}
fclose (infile);
Проблема в том, что читает файл только до того места, на котором встречает первую букву "я". Получается что чар "я" равен чару "eof". Что делать?
Поставил в конец файла "#", написал условие while (c != '#'); - работает. Но это для меня не оптимальное решение.
[син]"...вечно молодой, вечно пьяный..."[/син]
#1 
Murr коренной житель31.03.06 10:05
Murr
NEW 31.03.06 10:05 
in Antwort ойМОЛОДой 31.03.06 08:36
Пользоваться feof()
#2 
Murr коренной житель31.03.06 10:07
Murr
NEW 31.03.06 10:07 
in Antwort ойМОЛОДой 31.03.06 08:36
P.S. Файлы "rt" - изобретение злобного билли, сколько програмлю - всегда "rb"
#3 
ойМОЛОДой NightRider31.03.06 10:21
ойМОЛОДой
NEW 31.03.06 10:21 
in Antwort Murr 31.03.06 10:07
Спасибо, учту.
А что, если я инициализирую "с" не как чар, а как интеджер? Кажися, работает...
[син]"...вечно молодой, вечно пьяный..."[/син]
#4 
Russman старожил31.03.06 10:26
Russman
NEW 31.03.06 10:26 
in Antwort ойМОЛОДой 31.03.06 08:36
А можно спросить, где здесь c++?
ifstream input....
while(input.get(char))
....

Не подойдет?
---
Хе. "Чеpствый"... Видели бы Вы, что я с котятами делаю.(2:5020/400)
#5 
Murr коренной житель31.03.06 10:42
Murr
NEW 31.03.06 10:42 
in Antwort ойМОЛОДой 31.03.06 10:21
Эээ... как integer... тут тебя ждет много сюрпризов с расширением знака... так что unsigned не забывай...
#6 
Murr коренной житель31.03.06 10:44
Murr
NEW 31.03.06 10:44 
in Antwort ойМОЛОДой 31.03.06 10:21
Да, не "инициализирую", а "определяю" или "описываю".
Инициализация - присвоение начального значения.
#7 
  scorpi_ скептик31.03.06 15:45
31.03.06 15:45 
in Antwort ойМОЛОДой 31.03.06 08:36, Zuletzt geändert 31.03.06 16:22 (scorpi_)
Как уже заметили ранее С здесь и не пахнет, поэтому я исхожу из того, что тебе нужен С.
EOF - это просто макро, определяемый зачастую как -1. Ты видимо используешь кодировку в которой 'я' также равен -1, поэтому и получаешь наблюдаемое поведение. Использование binary в данном случае кстати вообще ни от чего не спасет, ибо -1 в твоём файле как была так и останется. Как правильно заметил Murr, использовать надо feof():
to Murr
злобен не Билли, злобны собственные руки. Не надо валить на Билли собственное неумение пользоваться языком. Это совершенно стандартное поведение, смотри раздел 7.9 стандарта С90.
#8 
Murr коренной житель31.03.06 16:14
Murr
NEW 31.03.06 16:14 
in Antwort scorpi_ 31.03.06 15:45
Использование binary в данном случае кстати вообще ни от чего не спасет
------
Эээ... а кто-то дал гарантию на отсутствие 0х1A в тексте?
злобен не Билли, злобны собственные руки.
-----
В данном случае - злобен именно билли - до него об "текстовых" файлах не слышали и не имели этого дополнительного гемороя...
#9