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

C语言getchar()统计文件字符计数偏多问题排查

为什么getchar()统计的字符数比文件实际显示的多1?

嘿,这个问题我太熟了!本质原因是你的test.txt文件末尾藏着一个你没看到的换行符\n,而你的程序把它也算进了计数里。

你以为文件里只有9个字符,但实际上大多数文本编辑器(比如VS Code、Notepad++甚至系统自带的记事本)在保存文本文件时,会自动在最后一行的末尾添加一个换行符。举个例子:你在编辑器里输入9个字符后直接保存,编辑器会悄悄给你补个\n,让文件符合Unix/Windows的文本文件规范(Unix系统要求文本文件的每一行都以换行结尾)。

那怎么验证呢?你可以在终端里用cat -A test.txt命令(Linux/macOS),这个命令会显示文件里的所有隐藏字符,包括换行符(显示为$)。如果看到最后有个$,就说明确实多了这个换行符。

再回到你的代码:

  • 原来的while((c = getchar()) != EOF)会读取文件里的每一个字节,包括那个隐藏的换行符,所以计数器会加到10,和你看到的结果一致。
  • 当你改成while((c = getchar()) != EOF && c != '\n')时,程序跳过了这个换行符的计数,所以结果就和你预期的9一致了。

如果你想统计文件的实际字节总数(包括所有不可见字符),那原来的代码是完全正确的;但如果只想统计可见的非换行字符,那加上c != '\n'的判断就没问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:07:37