这是我的if语句:
if (fgetc(fileName) != EOF) {
}
我知道如果我不在fgetc()
语句中运行if
,它将删除一个字符,我必须执行ungetc
才能返回它。当fgetc
在if
语句中时会发生这种情况吗?
答案 0 :(得分: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
,而不是文件名,而ungetc
不会return
字符,而是将其放回输入流所以它可以被下一个fgetc()
或fgets()
读取......在从流中再次读取之前,您可能无法ungetc
一次多个字节。