Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Ф-ции fopen, fgetc


Автор: AndreySol 28.6.2006, 08:32
Не работал с этими ф-циями, обычно пользую CFile, а сейчес вот понадобилось.
Что означает нижеприведенный код ?
Код

FILE *fp;
int curch;
int flag1=0;
fp = fopen(strFileName, "rb");// с этим все вроде понятно
if(fp != NULL)
{
    do
    {
        curch = fgetc(fp);// а вот здесь и ниже - не очень
        if(curch == 255)
        {
            curch = fgetc(fp);
            if(tolower(curch/16) == 15)
                flag1 = 1;
        }
    }
    while(flag1 == 0);
}
 

Автор: Mad 28.6.2006, 09:42
AndreySol, выбирает из файла побайтноб когда встречает ещ проверяет
Цитата(AndreySol @  28.6.2006,  07:32 Найти цитируемый пост)
           if(tolower(curch/16) == 15)
 и если да, то прекращает выборку
 

Автор: SergeCpp 28.6.2006, 09:54
неплохо бы поставить проверку на конец файла...

while( flag1 == 0 && feof( fp ) == 0 ) // или while( !( flag1 | feof( fp ) ) )
{
    //... прежний код
}

проверяя после цикла, нашлось-ли искомое в файле или нет 

Автор: AndreySol 28.6.2006, 15:28
Понял, спасибо.
Еще вопросик: что за символ "255", и где можно найти расшифровку остальных символов ? 

Автор: SergeCpp 29.6.2006, 09:32
255 — это код символа, его интерпретация зависит от программы.

В кодовой странице 1251 ему соответствует маленькая русская буква 'я'.

Скорее всего, тут дело не в символе как таковом, а в интерпретации прочитанного байта программой.

Разберитесь с программой или поместите её описание сюда.  

Автор: Dart 29.6.2006, 09:47
Расшифровка символов зависит от кодовой страницы.
Служебные символы, типа CR, LF, FF и т.д. везде, насколько я знаю, универсальные.
Но как их обрабатывает конкретное приложение - зависит от самого приложения.
Например, в консоли LF переводит строку, но не возвращает курсор в начало строки, а в виндах - возвращает.
В общем, поищи в документации - там это точно будет smile 
PS Символ 255 - не служебный, служебные - от 0 до 31 

Автор: AndreySol 30.6.2006, 07:36
Всем спасибо, все понятно. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)