工科男 发表于 2016-7-24 07:56:31

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

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

如题,我先把代码贴上来。#include <stdio.h>
int main ()
{
      void f(char x[]);
      char a;
      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!='\0';i++)
      {
                if ((x>='0')&&(x<='9'))                                                               
                                 n++;
                else      if (((x>='a')&&(x<='z'))||((x>='A')&&(x<='Z')))                           
                                 m++;
                else      if (x==32)                                                                                                                           
                                 j++;
                              else                              
                                    k++;

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

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

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

工科男 发表于 2016-7-24 08:04:54

论坛代码好像不能贴注释,所以我把注释截图一下。

无符号整形 发表于 2016-7-24 08:44:31

因为单引号里面只能有一个字符
而你的'32'有两个字符
所以应该写成if(x == 32)

小剑剑 发表于 2016-7-24 09:43:37

其实字符就是数字,数字就是字符
ascii码就是给字符没人一个号码
例如字符'a'的号码就是49
第一种x==32
32是空格的值结果正确
第二种x=='32'
两个单引号中间只能加入一个字符
而你加入了两个字符当然错
而像x=='\0'的情况这里的\0是一个字符因为    0被\    转移了
他代表ascii码是0的字符

工科男 发表于 2016-7-26 19:31:52

无符号整形 发表于 2016-7-24 08:44
因为单引号里面只能有一个字符
而你的'32'有两个字符
所以应该写成if(x == 32)

谢谢你的帮助,听君一句话,胜过两个小时的纠结

无符号整形 发表于 2016-7-26 19:33:00

那请把标签改为“已经解决”

工科男 发表于 2016-7-26 19:33:10

小剑剑 发表于 2016-7-24 09:43
其实字符就是数字,数字就是字符
ascii码就是给字符没人一个号码
例如字符'a'的号码就是49


感谢你的热心帮助,看到你详细的解说,心中豁然开朗,自己纠结了好久的知识点,现在终于拨开雨雾了

工科男 发表于 2016-7-26 19:34:16

无符号整形 发表于 2016-7-26 19:33
那请把标签改为“已经解决”

已改

无符号整形 发表于 2016-7-26 19:34:18

补充下,if(x =='\32')也可以

工科男 发表于 2016-7-26 19:35:16

无符号整形 发表于 2016-7-26 19:34
补充下,if(x =='\32')也可以

好的,谢谢啦

大奔G 发表于 2016-7-26 22:52:52

我纠结的是不是a是65?

工科男 发表于 2016-7-26 22:56:34

大奔G 发表于 2016-7-26 22:52
我纠结的是不是a是65?

A是65,a是97

大奔G 发表于 2016-7-26 23:11:57

工科男 发表于 2016-7-26 22:56
A是65,a是97

{:5_108:} 迷了、

工科男 发表于 2016-7-27 07:17:19

无符号整形 发表于 2016-7-26 19:34
补充下,if(x =='\32')也可以

刚才调试了一下,那个'\32'输出结果不对,不知道是不是我编译器有毛病
页: [1]
查看完整版本: 请教在字符运行当中的‘32’与32的区别