OK. OK 2019-08-10 17:40 采纳率: 33.3%
浏览 2872

关于int和char的区别。。。

#include
void main()
{
int a;
printf("input a char\n");
scanf("%c",&a);
a=(a>='A'&&a<='Z')?(a+32):a;
printf("%c",a);
}
我如果把int换成char就可以实现大写变小写,但是int就不行,我理解的是int和char不就是只有储存大小的差异吗,本质上不一样吗?难道我理解错了?

  • 写回答

5条回答 默认 最新

  • shifenglv 2019-08-10 21:06
    关注

    把a初始化为0就可以了,int a=0;。如果a不初始化,那么a就是一个不确定的值。scanf读取一个字符放在一个整型里边,按照从低位到高位存放的规则,那么整型的第一个字节会被改变,而高三个字节不会改变。如果对a进行比较,是用4个字节的宽度进行比较,而不是用最低那个字节进行比较。按照你的代码来看,scanf过后,a的值并不是输入那个字符,比如输入‘A’,a的低位是‘A’,但高位不是0,其实整个a是不等于“A”的,而是一个莫名其妙的数。如果a初始化为0,那他的高位和低位都是0,在输入一个字符,那它的低位就是那个字符,高位仍然为零,整个a就等于那个输入的字符。同样,printf("%c",a)输出的是a的低位字节,而不是整个a。

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器