请教在字符运行当中的‘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'
在此先谢谢各位大神了!! 论坛代码好像不能贴注释,所以我把注释截图一下。 因为单引号里面只能有一个字符
而你的'32'有两个字符
所以应该写成if(x == 32) 其实字符就是数字,数字就是字符
ascii码就是给字符没人一个号码
例如字符'a'的号码就是49
第一种x==32
32是空格的值结果正确
第二种x=='32'
两个单引号中间只能加入一个字符
而你加入了两个字符当然错
而像x=='\0'的情况这里的\0是一个字符因为 0被\ 转移了
他代表ascii码是0的字符 无符号整形 发表于 2016-7-24 08:44
因为单引号里面只能有一个字符
而你的'32'有两个字符
所以应该写成if(x == 32)
谢谢你的帮助,听君一句话,胜过两个小时的纠结 那请把标签改为“已经解决” 小剑剑 发表于 2016-7-24 09:43
其实字符就是数字,数字就是字符
ascii码就是给字符没人一个号码
例如字符'a'的号码就是49
感谢你的热心帮助,看到你详细的解说,心中豁然开朗,自己纠结了好久的知识点,现在终于拨开雨雾了 无符号整形 发表于 2016-7-26 19:33
那请把标签改为“已经解决”
已改 补充下,if(x =='\32')也可以 无符号整形 发表于 2016-7-26 19:34
补充下,if(x =='\32')也可以
好的,谢谢啦 我纠结的是不是a是65? 大奔G 发表于 2016-7-26 22:52
我纠结的是不是a是65?
A是65,a是97 工科男 发表于 2016-7-26 22:56
A是65,a是97
{:5_108:} 迷了、 无符号整形 发表于 2016-7-26 19:34
补充下,if(x =='\32')也可以
刚才调试了一下,那个'\32'输出结果不对,不知道是不是我编译器有毛病
页:
[1]