我有一个文本文件,它的结构如下:
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;
}
然而,它给出了一个奇怪的输出。我不知道错误出在哪里。代码看起来没问题。你觉得呢?
执行:
发布于 2019-02-22 02:08:27
您将fgets
限制在30个字符以内,并且注释
创建者: GIMP PNM过滤器1.1版
是38个字符。
发布于 2019-02-22 01:54:03
这是一个简单的\n
,当它被读取时也会返回\n
(它不会被丢弃),而print会让您在打印之后添加另一个\n
,因此您有2个fgets创建了一个空行
用fputs(stdout, str);
替换puts(str);
,就不会有空行了
注意:输出并不对应于文件的开头,可能是它的结尾?
如果我把
P2 #创建者: GIMP PNM过滤器版本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个字符
https://stackoverflow.com/questions/54813297
复制相似问题