2009-12-25 6 views
0

Я пытаюсь отлаживать следующий код:Показать результаты fgetc как символ на экране

int check_file(FILE* file) 
{ 
    int c; 
    int nl = '\n'; 

    while((c = fgetc(file)) != EOF) 
    { 
     if (c == nl) return 0; 
    } 

    printf("\n ERROR EOF \n"); 
    return 1; 

} 

, когда он получает сообщение об ошибке и возвращает 1, я хотел бы знать причину.

Я думал о печати на экране символа, который читается в переменной «c», прежде чем я получу ошибку (так что я могу понять, в какой части файла чтения находится ошибка), но это целое число.

Возможно ли как-то распечатать на экране как символ?

Благодаря

+0

Можно ли показать позицию файла до того, как появится ошибка с точки зрения номеров LINE и COLUMN? – asdf

+0

Скорее всего, вы получаете 'return 1;' потому что в вашем файле нет новой строки. Это само по себе не обязательно означает «ошибка». Вы уверены, что ваши файлы имеют хотя бы одну новую строку? Попробуйте добавить проверку 'if ferror (file) printf (" ferror \ n ");' before 'return 1;', чтобы увидеть, действительно ли была ошибка. –

ответ

1

Вы не знаете, что получили сообщение. Скорее всего, вы просто добираетесь до конца файла. Вы должны вызвать feof() или ferror(), чтобы определить, почему fgetc() не возвращает больше данных.

1

Ваш цикл завершается в конце файла (EOF), и, хотя вы можете распечатать прочитанный символ перед ним, это вам в целом не поможет. Если вы хотите сделать что-то другое в EOF, сделайте это. Другими словами: если EOF является ошибкой, тогда «в какой части файла» всегда заканчивается.

Чтобы получить символ из целого числа, используйте (char)some_int, а для вывода символа используйте [f] putc или printf("%c", some_int).

+0

привет, есть ли способ «видеть» с помощью редактора, такого как vi или что-то еще, где находится символ EOF? – asdf

+0

Это не символ, это состояние потока. Вы дошли до конца файла. Вы уже знаете, где это находится. –

+0

asdf: fgetc имеет более возможные значения возврата («коды ошибок»), чем есть возможные символы для чтения. EOF является одним из них и никогда не может существовать во входном файле. – 2009-12-25 12:41:43

1

putc и fputc оба принимают целочисленный аргумент.

Смежные вопросы