鱼C论坛

 找回密码
 立即注册
查看: 2152|回复: 13

请教在字符运行当中的‘32’与32的区别

[复制链接]
发表于 2016-7-24 07:56:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 工科男 于 2016-7-24 08:25 编辑

如题,我先把代码贴上来。
#include <stdio.h>
int main ()
{
        void f(char x[]);
        char a[100];
        printf ("请输入一串字符串:\n");
        gets(a);
        f(a);
        printf ("\n");
        return 0;
}
void f(char x[])
{
        int i;
        int n=0,m=0,j=0,k=0;
        for (i=0;x[i]!='\0';i++)
        {
                if ((x[i]>='0')&&(x[i]<='9'))                                                                 
                                   n++;
                else        if (((x[i]>='a')&&(x[i]<='z'))||((x[i]>='A')&&(x[i]<='Z')))                           
                                   m++;
                else        if (x[i]==32)                                                                                                                            
                                   j++;
                                else                                
                                    k++; 

        }
        printf ("该字符串含有字母:%d 个\n",m);
        printf ("该字符串含有数字:%d 个\n",n);
        printf ("该字符串含有空格:%d 个\n",j);
        printf ("该字符串含有其他符号:%d 个\n",k);
}

论坛代码的注释好像不能贴上去,所以我就截图了,而且感觉截图还不大清晰,所以,我就把这些问题打出来。
请大家看一下代码段的第22行,我的问题就出在那里:

这一行就是我所困惑的地方,当我写成x[i]==32时,结果正确,
但是写成x[i]=='32'时候,结果就不正确了。
空格在ASCII码中的编号是32,而且,我定义与使用的都是字符串,
很明显,在ASCII中的0~127之间的字符,整型与字符数据可以互换。
而字符数据在使用过程中都应该加单引号吧,比如本案例 x[i]>='a' 或者 x[i]<='9'
所以困惑,为什么要写成 x[i]==32,而不写成  x[i]=='32'

在此先谢谢各位大神了!!
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-7-24 08:04:54 | 显示全部楼层
论坛代码好像不能贴注释,所以我把注释截图一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-24 08:44:31 | 显示全部楼层
因为单引号里面只能有一个字符
而你的'32'有两个字符
所以应该写成if(x == 32)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-7-24 09:43:37 | 显示全部楼层
其实字符就是数字,数字就是字符
ascii码就是给字符没人一个号码
例如字符  'a'的号码就是49
第一种x==32
32是空格的值结果正确
第二种x=='32'
两个单引号中间只能加入一个字符
而你加入了两个字符当然错
而像x=='\0'的情况这里的\0是一个字符因为    0被  \    转移了
他代表ascii码是0的字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-7-26 19:31:52 | 显示全部楼层
无符号整形 发表于 2016-7-24 08:44
因为单引号里面只能有一个字符
而你的'32'有两个字符
所以应该写成if(x == 32)

谢谢你的帮助,听君一句话,胜过两个小时的纠结
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-26 19:33:00 From FishC Mobile | 显示全部楼层
那请把标签改为“已经解决”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-26 19:33:10 | 显示全部楼层
小剑剑 发表于 2016-7-24 09:43
其实字符就是数字,数字就是字符
ascii码就是给字符没人一个号码
例如字符  'a'的号码就是49

感谢你的热心帮助,看到你详细的解说,心中豁然开朗,自己纠结了好久的知识点,现在终于拨开雨雾了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-26 19:34:16 | 显示全部楼层
无符号整形 发表于 2016-7-26 19:33
那请把标签改为“已经解决”

已改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-26 19:34:18 From FishC Mobile | 显示全部楼层
补充下,if(x =='\32')也可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-7-26 19:35:16 | 显示全部楼层
无符号整形 发表于 2016-7-26 19:34
补充下,if(x =='\32')也可以

好的,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-26 22:52:52 | 显示全部楼层
我纠结的是不是a是65?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-26 22:56:34 | 显示全部楼层
大奔G 发表于 2016-7-26 22:52
我纠结的是不是a是65?

A是65,a是97
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-26 23:11:57 | 显示全部楼层

迷了、
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-27 07:17:19 | 显示全部楼层
无符号整形 发表于 2016-7-26 19:34
补充下,if(x =='\32')也可以

刚才调试了一下,那个'\32'输出结果不对,不知道是不是我编译器有毛病
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 07:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表