【发布时间】:2019-10-24 03:17:48
【问题描述】:
我有一个计算字符数的代码。它使用 getchar() 并且在执行时我使用 (./a.out
当我使用条件时,
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' 是从哪里来的呢?
【问题讨论】:
-
文件的内容是什么?什么是预期的输出?实际输出是多少?
-
问题可能是编辑器默认在文件末尾添加了一个新行(甚至是VIM!)
-
我随机输入了一些字符;确切的文本是“hsfiefefd”,不带引号,由 9 个字符组成。
-
getchar()获取ANSI字符。它可能会得到UTF字母作为最多四个不同的字符。 -
当心,如果你曾经在 Windows 上尝试过:换行符被编码为两个字符 '\r' 和 '\n',但通常 getchar() 只会给你 '\n'。如果您的编辑器以 UTF 格式存储,则开头可能有一个 BOM,需要一些字节。