Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Определение конца файла с кодировкой win |
Автор: Xmiler 11.3.2007, 13:01 |
Пишу прогу для сдачи в инст-win32 application. Обнаружил, что если ставишь букву "я"(код 255) в файле с кодировкой win, то текст после нее урезается (если использивать структу (c=getc(fp1))!=EOF ). Как поступить в таком случае? ![]() |
Автор: mr.Anderson 11.3.2007, 13:21 |
В поиск. Обсуждалось 1482 раза. |
Автор: JackYF 11.3.2007, 13:33 |
Потому что конец файла не определяется буквой. Нужно использовать функцию feof(FILE*). |
Автор: codelord 11.3.2007, 14:42 |
используй вместо char c; int c; |
Автор: Xmiler 11.3.2007, 15:16 |
mr.Anderson, прошу прощения. JackYF, спасибо! codelord, где именно? я использую putc далее.. А нафига функция getc(fp) возвращет EOF после конца файла?? Подскажите пожалуйста как этого избежать. Пишу программу шифрования файла - каждому символу сопоставлю по некоторому правилу другой символ. А этот EOF все порптит ![]() Заранее большое спасибо! З.Ы. Найти похожуу тему старался |
Автор: phprus 11.3.2007, 16:23 |
Xmiler Функция getc возвращает int, соответственно переменная "c" должна быть типа int. Тогда файл не будет обрезаться на букве "я" при сравнивании "с" с EOF. putc ожидает символ в виде типа int, так что если переменная "c" будет иметь тип int, то ничего страшного не случится. |
Автор: Xmiler 11.3.2007, 17:28 |
codelord, phprus, Спасибо!! Не понял в чем фокус, но все работает! ![]() Если не трудно, объясните почему(средства отладки к сожалению не знаю): условие unsigned int c; while ((c=getc(fp1))!=EOF) работает хотя EOF=-1 в stdio.h Ведь у меня беззнаковое, да и все возможных 256(дес.) значений заняты ASCII таблицей. Заранее спасибо! |
Автор: Любитель 11.3.2007, 19:36 |
Всё правильно работает. Что возвращает getc? 1. EOF если дошли до конца. 2. Код символа иначе, но (!) типом int. Если мы имеем char c, то при c = EOF приведёт к тому, что в c запишется 255 (бинарная интерпретация -1 для беззнакового однобайтового типа). |
Автор: BigHeart 19.3.2007, 15:18 | ||
гляньте, пожалуйста, такой код. тут такие проблемы: CharToOem не пашет при включённом юникоде, и я никак не могу заставить закончить считывание строки, когда достигнут конец файла
|
Автор: Rockie 19.3.2007, 15:37 | ||
BigHeart, а что программа делает? какие входные данные и что нужно получить в итоге? Добавлено @ 15:42
|
Автор: BigHeart 19.3.2007, 15:52 | ||
нужно просто прочесть из файла английсие слова и их русский перевод Добавлено @ 15:57
это тоже не помогает |
Автор: codelord 19.3.2007, 16:35 |
ошибки считывания файла точно нет? "D:\\AAA\\\english.txt" |
Автор: seacat79 19.3.2007, 16:38 | ||||||||
Не совсем понятно, как он у тебя делает, то, что ты хочешь сделать ![]()
Данную операцию зачем-то делаем 10000 раз ![]()
надо так
|
Автор: BigHeart 20.3.2007, 14:51 |
спасибачки!!! ![]() Добавлено @ 14:53 я только пол-года С++ учу. Ещё на методе проб и ошибок. |