getchar() 函数计算 C 中的字符数

getchar() function to count characters in C

我有一个计算字符数的代码。它使用 getchar() 并且在执行时我使用 (./a.out < test.txt) 其中 test.txt 是本地保存的文本文件。问题是计数器显示的值大于文件中的字符。

当我使用条件时,

while((c = getchar()) != EOF && c != '\n')

而不是

while((c = getchar()) != EOF)

在c是定义在main中的int的函数中,计数器是正确的。

int main() 
{
    long nc=0; int c;
    while((c = getchar()) != EOF)
    {
        putchar(c);
        ++nc;
    }
    printf("%ld", nc);
}

我认为问题是由于“\n”字符引起的。当我如上所示使用 putchar(c) 时,假设我的 test.txt 文件中有 9 个字符。现在,它应该打印文件中的所有字符,然后输出 9。但是,它会打印 10。此外,命令提示符在显示字符后转移到下一行,这是打印 10 的原因,因为它将 '\n' 计为一个字符。但是,那个'\n'是从哪里来的呢?

我敢打赌您实际上并没有验证文件的大小。使用

仔细检查尺寸
ls -ls test.txt

wc -c test.txt

在十六进制编辑器中打开您的文件。我怀疑你会在最后找到一个 new-line 字符 (0x0A)。

But, from where did that '\n' came from?

这首先取决于您创建或编辑文件的方式。

如果您使用

创建
echo "Test file" > test.txt

例如,那么bash会自动在末尾添加一个new-line字符。某些文本编辑器可能会做同样的事情。