如果某个字符位于if语句中,fgetc(文件名)是否会提取该字符?

如果某个字符位于if语句中,fgetc(文件名)是否会提取该字符?,c,fgetc,C,Fgetc,这是我的if声明: if (fgetc(fileName) != EOF) { } 我知道如果我在不在if语句中运行fgetc(),它将删除一个字符,我必须执行ungetc才能返回它。当fgetc在if语句中时,会发生这种情况吗?会的,因为您没有存储读取的字节,所以丢失了它。改用这个: int c; if ((c = fgetc(fp)) != EOF) { ungetc(c, fp); /* put the byte back into the input stream */

这是我的if声明:

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

我知道如果我在不在
if
语句中运行
fgetc()
,它将删除一个字符,我必须执行
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 */
}

还请注意,您应该将
文件*
传递给
fgetc
,而不是文件名,
ungetc
不会
返回
字符,而是将其放回输入流中,以便下一个
fgetc()
fgets()
。。。在再次从流中读取之前,您可能无法一次
ungetc
多个字节。

我希望将该行放回输入流中。那么,我是否必须将ungetc同时添加到if语句和else语句中?您不能使用
ungetc
将整行放回输入流,最多只能放回一个字节。无需将任何内容放回
else
部分,因为您没有读取一个字节,因此您点击了文件的结尾。我调用fgetc的目的是查看它是否为EOF。如果没有,我希望它继续正常读取,这就是为什么我希望将字符放回流中。那么我需要把ungetc放在if和else部分吗?如果我把c声明为char而不是int,那会不会有问题?我这样问是因为如果我想将它反馈回ungetc,它必须是char,对吗?
c
必须声明
int
,因为
fgetc()
可以返回所有字节值加上
EOF
,这对于
char
来说太多了。我为了你的目的修改了答案。