我有一个文本文件,其结构如下:
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;
}
但是,它给出了奇怪的输出。而且我不知道错误在哪里。该代码似乎还可以。你觉得呢?
执行:
答案 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个字符,所以削减了一行