鱼C论坛

 找回密码
 立即注册
查看: 2271|回复: 7

[已解决]C语言字符型赋值问题

[复制链接]
发表于 2018-8-15 09:04:12 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 every-day 于 2018-8-15 09:07 编辑

一度困惑后,选择了一个个尝试。
发现整形可以整形输出——输出结果对应整形,也可以字符型输出——输出结果对应相应ASCII值,
反之字符型也是如此。
字符型赋值只接受一个字符或ASCII,ASCII值的返回范围是0-255,
直接赋值数字就可以不必加单引号。一个字符的赋值——比如要赋值\给ch,必须写成ch=‘\\’。

然后我尝试了
char o,p,q;
o=a;p='/b';q='\c';
printf("%c,%c,%c\n",o,p,q);
发现可以正常输出字符abc,请问这是怎么一回事???
最佳答案
2018-8-15 09:20:08
学习C语言的话,建议你仔细思考一下这些数据类型的本质。
……
整数型、字符型分别占4个字节、1个字节。
  1. o=a;p='/b';q='\c';
复制代码
这段代码个人觉得不符合语法,哪怕能够如预期一样输出,也不符合约定俗成的代码规范,不便于阅读和他人理解。
一般对编译器而言,字符型数值的范围本身就是0-254,所以你是可以以ASCII码数值的形式直接赋值,输出的是字符还是数字,取决于printf的占位符是%c还是%d。
\这个符号为转义字符,你可以自己详细查一下,不太好解释。
直接赋值数字确实不需要加单引号,如果加单引号的话,代表的是字符型数字,比如'1'对应的就是ASCII码的31了,而不加单引号的1为ASCII码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-15 09:14:38 | 显示全部楼层
很多字符的转义就等于它自身
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-15 09:20:08 | 显示全部楼层    本楼为最佳答案   
学习C语言的话,建议你仔细思考一下这些数据类型的本质。
……
整数型、字符型分别占4个字节、1个字节。
  1. o=a;p='/b';q='\c';
复制代码
这段代码个人觉得不符合语法,哪怕能够如预期一样输出,也不符合约定俗成的代码规范,不便于阅读和他人理解。
一般对编译器而言,字符型数值的范围本身就是0-254,所以你是可以以ASCII码数值的形式直接赋值,输出的是字符还是数字,取决于printf的占位符是%c还是%d。
\这个符号为转义字符,你可以自己详细查一下,不太好解释。
直接赋值数字确实不需要加单引号,如果加单引号的话,代表的是字符型数字,比如'1'对应的就是ASCII码的31了,而不加单引号的1为ASCII码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-15 09:22:38 | 显示全部楼层
TyCk 发表于 2018-8-15 09:20
学习C语言的话,建议你仔细思考一下这些数据类型的本质。
……
整数型、字符型分别占4个字节、1个字节。
...

所以 '/b'   即便可以输出字符b,也是不符合语法的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-15 09:33:05 | 显示全部楼层
every-day 发表于 2018-8-15 09:22
所以 '/b'   即便可以输出字符b,也是不符合语法的?

讲真,不知道''/b’代表啥意思,'\'为转义字符,‘\b’代表退格,但是没见过‘/b’。
就赋值而言,‘/b’应当是两个字符吧,char只能赋一个字符,所以有些混乱呐
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-15 11:27:52 | 显示全部楼层
TyCk 发表于 2018-8-15 09:33
讲真,不知道''/b’代表啥意思,'\'为转义字符,‘\b’代表退格,但是没见过‘/b’。
就赋值而言,‘/b ...

还是谢谢你的解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-15 12:22:50 | 显示全部楼层
TyCk 发表于 2018-8-15 09:33
讲真,不知道''/b’代表啥意思,'\'为转义字符,‘\b’代表退格,但是没见过‘/b’。
就赋值而言,‘/b ...

        o=a;p='/b';q='\c';r='d';s='\acde';

结果是:a,b,c,a,b,c,d,e.
可能是因为字符型,只能写入一个,所以前面的都覆盖掉了吧,就像/b结果是b。
还有,请问,a可以不加单引号直接赋值吗?
o=a;p='/a';q='\\a';r='a';s='\csda';
我验证过结果都为a
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-15 13:38:06 | 显示全部楼层
本帖最后由 TyCk 于 2018-8-15 13:39 编辑
every-day 发表于 2018-8-15 12:22
o=a;p='/b';q='\c';r='d';s='\acde';

结果是:a,b,c,a,b,c,d,e.


最好不要这样,赋值的话,还是按照一般语法要求,例如char型变量 cZ = ‘a’;
不然,不同编译器可能不一样,容易出现各种莫名其妙的问题。

另外,直接写ASCII码的话,不要加单引号,前面的回复也提过了,有没有单引号,意义是不同的。

我觉得,可能也是被覆盖掉了,或者内存地址的存放有些问题,然后就相当于写入最后一个。
有时间了,你也可以尝试调试一下,研究一下赋值的过程。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 20:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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