C语言程序 统计一个句子中的字母,数字,空格还有其他字符的个数 帮我看看下面这个程序错在哪

#include<stdio.h>intmain(){inta=0,b=0,c=0,d=0,i;charx[100];gets(x);for(i=0;x[i]!='\0'... #include<stdio.h>
int main()
{
int a=0,b=0,c=0,d=0,i;
char x[100];
gets(x);
for(i=0;x[i]!='\0';i++)
{
if((x[i]>=65&&x[i]<=90)||(x[i]>=97&&x[i]<=122))
a=a+1;
else if(x[i]==' ')
b=b+1;
else if(x[i]>='0'&&x[i]<='9')
c=c+1;
else
d=d+1;
}
printf("字母的个数是%d\n",a);
printf("空格的个数是%d\n",b);
printf("数字的个数是%d\n",c);
printf("其他字符的个数是%d\n",d);
return 0;
}

运行结果为
请输入一个字符串
金琇泽
字母的个数是1
数字的个数是0
空格的字数是0
其他字符的个数是5
Press any key to continue

很奇怪的是 输入这三个中文字的时候老是不对,换其他的又好像对了,真的很蛋疼,为什么啊
展开
 我来答
wolf_lhy
2013-02-21 · TA获得超过6609个赞
知道大有可为答主
回答量:1090
采纳率:66%
帮助的人:549万
展开全部
你的程序是对的,没有任何问题,是你的输入错了,如果你输入的里面没有汉语,只有英语,即,你的输入的是字母,数字,空格以及其他符号,就没有问题。
为什么呢?这个取决于汉字的编码:
比如说,我是说比如啊,因为我也没仔细的了解汉字的真正编码,所以举个例子:
“金琇泽“

这三个字,在你看来,是三个汉字,但是,在你的程序看来,其实是6个char类型的变量,
因为一个汉字,是用两个字节来表示的。

比如:计算机把“金琇泽”看成了 0x02 0x45 0x89 0x33 0x56 0x88 ,我是举例子,总之计算机就把以上看成了是6个char类型变量,然后进行判断的。
追问
那如果是把三个汉字看成了六个char类型变量,那最后不是有六个其他字符,但是为什么结果是5个其他字符和一个字母呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
勤学苦练123332
2013-02-21
知道答主
回答量:16
采纳率:0%
帮助的人:8.1万
展开全部
这个程序是考你ASCII码的,a-z A-Z,中文不再这个表里。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
打死小胖nice
2013-02-21 · TA获得超过143个赞
知道答主
回答量:101
采纳率:0%
帮助的人:31.9万
展开全部
可能这几个字的编码超出了某个范围吧
追问
你能深入的解释下吗 我还是不太明白  还有就是,程序是不是没有问题啊?  我刚才又试了下,只有 琇 不对 ;
追答
程序应该是没问题的。我觉得琇这个字的编码可能超出了char的范围,导致出现异常
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式