1. 问题
今天学了一个统计字符数的代码
#include <stdio.h>
int main()
{
int count = 0 ;
printf("请输入英文字符:");
while ( getchar() != '\n')
{
count = count + 1;//这个算式不是用来计数的吗?为什么中文会计对应两个字符?
}
printf("你总共输入了%d个字符", count);
return 0;
}
本来我理解count = count + 1 这个表达式是用来统计字符数的。
但是我在试着输入中文的时候,程序统计中文是2个字符,结果如下:
请输入英文字符:你好
你总共输入了4个字符
所以,我想重新了解一下这个程序是怎么统计字符的?能否对代码的每一个作用部位有一个详细解释?
2. 回答
在计算机中存储中文使用的编码规则是GB2312或GB2312-80,规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,这样我们就可以组合出大约7000多个简体汉字了。在这些编码里,连在ASCII里本来就有的数字、标点、字母都通通重新编了两个字节长的编码,这就是常说的“全角”字符,而原来在127号以下的那些就叫“半角”字符。
就这么说吧,字母和英文输入法下的一些标点符号都可以用ascii码形式表示,占一个字符,
而汉字和中文下的标点符号就用到了其他的解码标准来实现,像GB2312之类的标准,还有其他的感兴趣自行百度。它是占两个字符的,这也是为啥你打代码的时候,英文的分号可以,而中文的分号不可以,他俩代表着不同的数值;
再说回你的这个问题,你输入“你好”,在计算机看来就相当于输入了四个字符:“xxyy ”(具体是啥我也不知道,xx合在一起表示“你”,yy合在一起表示“好”,这个具体的值根据使用到解码规则有关),所以在循环的时候就一共执行了4次count++;所以结果是4.


被折叠的 条评论
为什么被折叠?



