逐行读取图像(如文本)

时间:2019-02-21 17:51:48

标签: c

我有一个文本文件,其结构如下:

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 :(得分:1)

您将fgets的字符数限制为30个字符

  

#创建者:GIMP PNM过滤器1.1版

是38个字符。

答案 1 :(得分:0)

很简单, fgets 也会在读取(不丢弃)并通过 puts 写入时返回\n,并添加另一个{{1 }},因此您有2 \n创建一个空行

\n替换为puts(str);,您将不会出现空行

注意:输出与文件的开头不对应,可能是文件的结尾?

如果我放

fputs(stdout, str);

文件中的执行结果为:

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

因为超过29个字符,所以削减了一行