gpt4 book ai didi

c++ - 与 fgetc() 一起使用的整型变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:43:51 26 4
gpt4 key购买 nike

我试图理解一些基本代码,但被下面的代码弄糊涂了

int main ()
{
FILE *fp;
int c;
int n = 0;

fp = fopen("file.txt","r");
if (fp == NULL)
{
perror("Error in opening file");
return(-1);
}
do
{
c = fgetc(fp);
if ( feof(fp) )
{
break ;
}
printf("%c", c);
} while(1);

fclose(fp);
return(0);
}

谁能解释为什么 c 是整数类型,即使它是由 fgetc(fp) 定义的,据我所知,它只获取下一个字符?

最佳答案

鉴于此特定代码的精确编写方式,c 不需要是 int 类型——如果 c<,它仍然可以工作char 类型。

不过,大多数从文件中读取字符的代码应该(至少在最初)将这些字符读取到 int 中。具体来说,C 风格 I/O 的部分基本设计是像 getcfgetc 这样的函数可以返回 EOF 以及可能来自文件的任何值.也就是说,可以从文件中读取任何char 类型的值。 getcfgetc 等可以通过返回至少一个不会/不能的值来表示文件结束t 来自文件。它通常为 -1,但不能保证。当 char 被签名时(如今通常如此),您可以从文件中获取一个值,当它被分配给 char 时,该值将显示为 -1,因此如果您依赖于返回值来检测 EOF,这可能会导致误检测。

问题中包含的代码只是将文件内容复制到标准输出,一次复制一个字符。利用 EOF 返回值,我们可以稍微简化代码,所以主循环如下所示:

int c;

while (EOF != (c = fgetc(fp)))
printf("%c", c); // or: putchar(c);

我想有些人可能会觉得这过于简洁。其他人可能反对循环条件内的赋值。至少,我认为这些是合理且有效的论点,但这仍然更适合图书馆的设计,因此更可取。

关于c++ - 与 fgetc() 一起使用的整型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32640855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com