2016-04-12 7 views
-6

Я пытаюсь написать код, который читает файл и печатает символы из него. Если символ нечитабельный, он должен печатать ?. Если в файле есть ошибки, код возвращает -1, иначе он возвращает количество прочитанных символов. Как-то это не работает должным образом, потому что я не могу его скомпилировать.Чтение C из файла

int printfile(const char *filename) 
{ 
    FILE *f = fopen(filename, "r"); 
    int i, c; 
    char k = "?"; 

    while ((i = fgetc(f)) != EOF) { 
     c++; 
     if(isprint(i)){ 
      printf("%c ", i); 
     } 
     else if (ferror(f)) return -1; 
     else { 
      printf("%c", k); 
     } 
    } 
    return c; 
} 

Должен ли я зарезервировать место для этого или что-то, чтобы заставить его работать, или код является неправильным.

+2

В каком виде это не работает должным образом? – Henningsson

+7

«Как-то это не работает правильно» не является полезным описанием ошибки. Вход, ожидаемый выход, наблюдаемый выход. На самом деле это отладка 101. Кроме того, ваш примерный код должен быть скомпилирован в программу, т. Е. Иметь 'int main()' и все необходимое включает. – DevSolar

+4

Во-первых, вы не инициализируете 'c'. Значение, которое оно начинается, является неопределенным. Во-вторых, вы не закрываете файл с помощью 'fclose()'. В-третьих, вы никогда не проверяете, что исходный 'fopen()' преуспел. –

ответ

0

Вот пример того, как я буду применять PrintFile, надеюсь, что это поможет.

#include <stdio.h> 

int PrintFile(const char *filename); 

int PrintFile(const char *filename) 
{ 
    FILE *file = fopen(filename, "r"); 

    if (file == NULL) 
    { 
     return -1; 
    } 

    int c = 0; 
    int i = 0; 

    while ((c = fgetc(file)) != EOF) 
    { 
     if (isprint(c)) 
     { 
      fputc(c, stdout); 
      i++; 
     } 
     else 
     { 
      fputc('?', stdout); 
     } 
    } 

    if (ferror(file)) 
    { 
     return -2; 
    } 

    return i; 
} 
Смежные вопросы