gpt4 book ai didi

c - 从C文件中逐个字符读取

转载 作者:太空宇宙 更新时间:2023-11-04 01:08:39 24 4
gpt4 key购买 nike

我写了下面的程序:

int main(){
char str[500],c;
FILE *f1=fopen("input.txt","r");
FILE *f2=fopen("output.txt","w");


while(c=fgetc(f1)!=EOF)
fputc(toupper(c),f2);


fclose(f1);
}

虽然我没有得到想要的结果。我使用 do while 循环重写了代码。

int main(){
char str[500];
FILE *f1=fopen("input.txt","r");
FILE *f2=fopen("output.txt","w");
char c;

do
{
fputc(toupper(c),f2);
c=fgetc(f1);
}while(c!=EOF);
}

我发现第一个代码失败的原因是因为在 while 循环中while(c=fgetc(f1)!=EOF),我们不能保证 != 的左边部分首先被评估,因此结果不正确。这个解释正确吗?

最佳答案

是的,你是对的;在您的第一个代码中,您的 while 循环写错了:

while(c=fgetc(f1)!=EOF)

应该是:

while((c=fgetc(f1))!=EOF)
// ^ ^ added parenthesis

因为 precedence of operator !=大于条件表达式c=fgetc(f1)!=EOF中的=运算符,第一个返回比较结果的值从带有 EOF(0 或 1)的 fgetc() 并将其分配给 c。 (这意味着 c=fgetc(f1)!=EOF 表达式等同于 c=(fgetc(f1)!=EOF) 而这不是您所需要的。 )

您需要 () 按照我的建议覆盖优先级。

但是您还有第二件事需要改进,即 c 变量必须是一个int(不是 char) 以保存 EOF 值。

非常好的阅读:Definition of EOF and how to use it effectively

关于c - 从C文件中逐个字符读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17714771/

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