为啥一个中文是算三个

#include<stdio.h>
int main()
{
char ch;
int n=0,m=0,o=0;
printf("输入字符串:");
while((ch=getchar())!='\n')
{
if(ch<='9'&&ch>='0')
n++;
else if (ch<='Z'&&ch>='A'||ch<='z'&&ch>='a')
m++;
else
o++;
}
printf("数字 %d 英文字母 %d 其他 %d\n",n,m,o);
}

因为一个中文要占三个字节
getchar()是每次读取一个字节,一个中文读取三次
如有帮助,望采纳!谢谢!

编码方式导致的问题,BMP 中的汉字字节数(常用汉字都在这里面):
UTF-8 3 字节

UTF-16 2 字节

UTF-32 4 字节

BMP 外的汉字

UTF-8 4 字节

UTF-16 4 字节

UTF-32 4 字节

参考下面这篇文章中的内容:

img