0
这是if语句我有:如果fgetc(fileName)在一个IF语句中,它会拉一个字符吗?
if (fgetc(fileName) != EOF) {
}
我知道,如果我跑fgetc()
时不if
语句中它会删除一个角色,我必须做ungetc
归还。当fgetc
在if
声明内时,会发生这种情况吗?
这是if语句我有:如果fgetc(fileName)在一个IF语句中,它会拉一个字符吗?
if (fgetc(fileName) != EOF) {
}
我知道,如果我跑fgetc()
时不if
语句中它会删除一个角色,我必须做ungetc
归还。当fgetc
在if
声明内时,会发生这种情况吗?
是的,因为你没有存储读取的字节,所以你失去了它。用这个代替:
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
,而不是一个文件名,并ungetc
不return
的性格,但把它放回输入流,因此它可以被下一个读fgetc()
或fgets()
...在再次从流中读取数据之前,您可能无法一次多于一个字节地使用ungetc
。
我想把这行放回到输入流中。那么我是否必须在if语句和其他语句中添加ungetc? – Brandon
你不能用'ungetc'把整行放回到输入流中,最多可以放回一个字节。由于您没有读取一个字节,所以不需要将任何东西放回'else'部分,就可以达到文件结束。 – chqrlie
我打算调用fgetc的目的是找出它是否是EOF。如果不是,我希望它继续正常读取,这就是为什么我要把字符串放回到流中的原因。那么我需要把ungetc放在if和else的部分吗? – Brandon