Читать изображение как текст, строка за строкой - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть текстовый файл, который имеет структуру, такую ​​как:

P2
# CREATOR: GIMP PNM Filter Version 1.1
445 243
255
108
107
104
102
102
[...]

И я хочу читать этот текстовый файл построчно.Итак, я написал этот код:

int main(void) {

     char str[50];
        FILE *fp;
        fp = fopen("/home/user/Downloads/file.pgm", "r");

        if(fp == NULL)
        {
            printf("Error opening file\n");
            exit(1);
        }

        printf("Testing fgets() function: \n\n");
        printf("Reading contents of myfile.txt: \n\n");

        while( fgets(str, 30, fp) != NULL )
        {
            puts(str);
        }

        fclose(fp);

        return 0;
}

Однако, он дает странный выводИ я не знаю, где ошибка.Код кажется в порядке.Как вы думаете?

Исполнение:

output

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Вы ограничиваете fgets 30 символами, и комментарий

# СОЗДАТЕЛЬ: GIMP PNM Filter Version 1.1

состоит из 38 символов.

0 голосов
/ 21 февраля 2019

это просто fgets и возвращают \n, когда он читается (он не отбрасывается), а запись с помощью ставит , вы добавляете другой \n после печати,таким образом, у вас есть 2 \n создание пустой строки

Замените puts(str); на fputs(stdout, str);, и у вас не будет пустых строк

Примечание: вывод нене соответствует началу файла, может быть его конец?

если я добавлю

P2
# CREATOR: GIMP PNM Filter Version 1.1
445 243
255
108
107
104
102
102

в файл, который дает выполнение:

pi@raspberrypi:/tmp $ ./a.out
Testing fgets() function: 

Reading contents of myfile.txt: 

P2

# CREATOR: GIMP PNM Filter Ve
rsion 1.1

445 243

255

108

107

104

102

102

одна строка обрезана, поскольку содержит более 29 символов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...