You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

fgetc返回乱码:ASCII文件读取输出程序异常排查求助

问题分析与修复方案

嘿,我一眼就瞅出问题所在了——你的循环条件里藏着个优先级的坑!

问题根源

C语言中,!=运算符的优先级比=更高,所以你写的:

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

实际上会被编译器解析成:

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

这意味着每次调用fgetc读取字符后,程序会先判断该字符是否不等于EOF,得到一个布尔结果(1表示真,0表示假),然后把这个布尔值赋值给变量c。你最终输出的是ASCII值为1或0的控制字符,这些字符在终端里显示出来就是你看到的乱码。

修复方法

给赋值语句加上括号,强制让赋值操作先执行,再进行判断:

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

这样程序会先把fgetc读取到的字符(或EOF)赋值给c,再判断c是否不等于EOF,逻辑就完全正确了。

额外提醒

值得肯定的是,你把c声明为int类型是正确的——因为EOF是一个int类型的特殊值(通常为-1),如果用char存储的话,可能会因为符号位的问题导致无法正确判断EOF,这部分你做对了~

内容的提问来源于stack exchange,提问作者akatz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:03:04