2016-01-20 45 views

回答

0

是的,因为你没有存储读取的字节,所以你失去了它。用这个代替:

int c; 
if ((c = fgetc(fp)) != EOF) { 
    ungetc(c, fp); /* put the byte back into the input stream */ 
    /* not at end of file, keep reading */ 
    ... 
} else { 
    /* at end of file: no byte was read, nothing to put back */ 
} 

另外请注意,你应该通过一个FILE*fgetc,而不是一个文件名,并ungetcreturn的性格,但把它放回输入流,因此它可以被下一个读fgetc()fgets() ...在再次从流中读取数据之前,您可能无法一次多于一个字节地使用ungetc

+0

我想把这行放回到输入流中。那么我是否必须在if语句和其他语句中添加ungetc? – Brandon

+0

你不能用'ungetc'把整行放回到输入流中,最多可以放回一个字节。由于您没有读取一个字节,所以不需要将任何东西放回'else'部分,就可以达到文件结束。 – chqrlie

+0

我打算调用fgetc的目的是找出它是否是EOF。如果不是,我希望它继续正常读取,这就是为什么我要把字符串放回到流中的原因。那么我需要把ungetc放在if和else的部分吗? – Brandon

相关问题