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字符。某些文本编辑器可能会做同样的事情。
我有一个计算字符数的代码。它使用 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字符。某些文本编辑器可能会做同样的事情。