鱼C论坛

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

[已解决]求助

[复制链接]
发表于 2023-2-20 19:32:46 | 显示全部楼层 |阅读模式

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

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

x
void main()
{
        int a,b=322;
        float x,y=8.88;
        char c1='k',c2;
        a=y;
        x=b;
        a=c1;
        c2=b;
        printf("%d,%f,%d,%c",a,x,a,c2);
}
这个代码怎么出来结果是107,322.000000,107,BPress any key to continue
不是很懂这两个107怎么来的 还有后边的英语也不知道怎么出来的
最佳答案
2023-2-20 19:51:09
程序实际输出的结果是:
107,322.000000,107,B
后面那个
Press any key to continue
是DEV-C++的调试结果。告诉你说这个程序结束了
用stdlib里面的system("pause")有相同效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-20 19:44:41 | 显示全部楼层
我看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-20 19:46:01 | 显示全部楼层

我加了\n 现在答案变成107
,322.000000
,107
,B
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-20 19:47:10 | 显示全部楼层
a先被赋值为 y 的值,再被赋值为 c1 的值,所以打印出来的时候应该输出的 a 是 c1 的值,由于打印的占位符是 "%d" 所以打印 c1='k' 的ASCII码,也就是107
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-20 19:48:34 | 显示全部楼层
ASCII.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-20 19:49:07 | 显示全部楼层
额外减小 发表于 2023-2-20 19:47
a先被赋值为 y 的值,再被赋值为 c1 的值,所以打印出来的时候应该输出的 a 是 c1 的值,由于打印的占位符 ...

c2的值是怎么成B的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-20 19:51:09 | 显示全部楼层    本楼为最佳答案   
程序实际输出的结果是:
107,322.000000,107,B
后面那个
Press any key to continue
是DEV-C++的调试结果。告诉你说这个程序结束了
用stdlib里面的system("pause")有相同效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-20 19:53:17 | 显示全部楼层
本帖最后由 liuhongrun2022 于 2023-2-20 19:54 编辑
大苏打dd 发表于 2023-2-20 19:49
c2的值是怎么成B的


char字符占 8bit 的空间,表达范围是 0~255,你赋的值 322 已超出其可表达的范围,高位部分会被截断抛弃。
如322,其二进制为0000 0001 0100 0010(用十六进制来表达即 0x142 ),因为只能存放 8bit 的数据,故而变量 c2 实际存放的仅是322的低8位,即 0100 0010 (用十六进制来表达即 0x42 ),用十进制来表达即是 66 ,对应 ASCII 码正好是字符'B'

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
额外减小 + 2 + 2 同上

查看全部评分

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

使用道具 举报

发表于 2023-2-20 19:53:31 | 显示全部楼层
大苏打dd 发表于 2023-2-20 19:49
c2的值是怎么成B的

你把 char 类型的 c2 赋值为 b=322 嘛,因为 char 类型尺寸为1字节,存放不了 322这么大的数字,所以溢出了(相当于减掉256)所以  c2 就变成66,即'B'的ASCII码

评分

参与人数 1荣誉 +2 鱼币 +3 贡献 +3 收起 理由
liuhongrun2022 + 2 + 3 + 3 纯C/C佳佳新手

查看全部评分

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

使用道具 举报

 楼主| 发表于 2023-2-20 19:53:57 | 显示全部楼层
额外减小 发表于 2023-2-20 19:51
程序实际输出的结果是:
107,322.000000,107,B
后面那个

有点不理解那个B,c2=b 之后c2不是322吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-2-20 19:55:02 | 显示全部楼层
大苏打dd 发表于 2023-2-20 19:53
有点不理解那个B,c2=b 之后c2不是322吗

溢出了。因为c2是char类型,不能存放322.具体我觉的liuhongrun说的更清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-20 19:55:11 | 显示全部楼层
额外减小 发表于 2023-2-20 19:53
你把 char 类型的 c2 赋值为 b=322 嘛,因为 char 类型尺寸为1字节,存放不了 322这么大的数字,所以溢出 ...

原来如此 谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-20 19:55:24 | 显示全部楼层
大苏打dd 发表于 2023-2-20 19:53
有点不理解那个B,c2=b 之后c2不是322吗

%c 会把数字识别成ASCII码的

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
额外减小 + 2 + 2 过奖

查看全部评分

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

使用道具 举报

发表于 2023-2-20 19:56:09 | 显示全部楼层

不用谢。我觉得最佳应该给蓝色的这位(

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
liuhongrun2022 + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 19:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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