如果fgetc(fileName)在IF语句中,它会拉出一个字符吗?

时间:2016-01-20 02:57:18

标签: c fgetc

这是我的if语句:

if (fgetc(fileName) != EOF) {
}

我知道如果我不在fgetc()语句中运行if,它将删除一个字符,我必须执行ungetc才能返回它。当fgetcif语句中时会发生这种情况吗?

1 个答案:

答案 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一次多个字节。