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
相关产品推荐
相关产品推荐

