以下C程序是计算字符数。
#include <stdio.h >
int main()
{
int nc = 0;
while (getchar() != EOF)
{
++nc;
printf("%d\n", nc);
}
return 0;
}
当我输入一个角色时,例如&#39; y&#39;在终端中,输出返回如下
1
2
这个计算是如何发生的以及为什么2在输出中?
答案 0 :(得分:3)
你输入了#34;一个角色&#34;。一个y
和一个新行字符。那是2。
答案 1 :(得分:3)
我想你不知道,但当你按回车键时,你只需插入换行符或'\n'
。如果要获得正确的结果,请忽略换行符或将nc减少一个。
#include <stdio.h>
int main()
{
int nc = 0;
while (getchar() != EOF)
{
++nc;
printf("Character count is:%d\n", nc - 1);
}
return 0;
}
更好的代码:
#include <stdio.h>
int main()
{
int nc = 0;
for(;;)
{
do
++nc;
while (getchar() != '\n');
printf("Character count is:%d\n", nc - 1);
nc = 0;
}
}
更新的代码会将您的计数器重置为0.
答案 2 :(得分:1)
因为你输了两个字。一个是y
,另一个是\n
(换行符)字符。
因此你得到输出1和2.
答案 3 :(得分:0)
当你点击输入时,它被认为是一个角色
答案 4 :(得分:0)
如果只想计算可见字节数,可以使用isprint
函数,该函数返回字节是可打印的还是空格字符。它是这样的:
#include <ctype.h>
#include <stdio.h>
int main()
{
int nc = 0;
int ch;
while((ch = getchar()) != EOF)
{
if (isprint(ch) && ch != ' ')
++nc;
printf("Character count after reading '%c' is %d.\n",ch, nc);
}
return 0;
}
请注意,由于在C中,char
不是Unicode字符,但通常只是一个字节,因此该程序将某些字符计为2个或更多字节,例如表情符号,西里尔字母,中文表意文字。