鱼C论坛

 找回密码
 立即注册
查看: 2795|回复: 3

c问题

[复制链接]
发表于 2012-3-30 14:27:19 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 1020232499 于 2012-3-30 14:27 编辑

#include<stdio.h>


void main()
{
        int a;
        scanf("%c",&a);
        putchar(a);
        putchar('\n');

        printf("%d\n",a);

}

为什么结果是
gg
-858993561
Press any key to continue



最佳答案

查看完整内容

注意不要玩弄编译器。 否则编译器就会让你费解。对int型数据 scanf 里面最好就要%d 然后输入数据。 ----------------------------------------------------------------- int 型数据在VC6中占4个字节 debug模式下会将未初始化的字节放上0xCC.而-858993561的补码刚好是 1100 1100 1100 1100 1100 1100 0110 0111 最后一个字节的 0110 0111 就是‘g’的ASCII码 0x67 你的scanf里面是%c 。。‘g’被放在了a的第 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-30 14:27:20 | 显示全部楼层
本帖最后由 风扫地 于 2012-3-30 15:53 编辑

注意不要玩弄编译器。
否则编译器就会让你费解。对int型数据
scanf  里面最好就要%d  然后输入数据。
-----------------------------------------------------------------
int 型数据在VC6中占4个字节
debug模式下会将未初始化的字节放上0xCC.而-858993561的补码刚好是   

1100 1100 1100 1100 1100 1100  0110 0111
最后一个字节的  0110 0111   就是‘g’的ASCII码 0x67

你的scanf里面是%c 。。‘g’被放在了a的第一个字节里面。
而后面的三个字节都是 0xcc(编译器默认放的数)
0xcccccccc67  就是-858993561 的补码
而putchar只用了a的第一个字节也就是  0x67。。所以putchar能输出g  
而printf(%d)输出 -858993561


demo:#include<stdio.h>


void main()
{
        int a;
       *((char *)&a) = 0x67;
        printf("%d\n",a);

}
结果也是 -858993561






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

使用道具 举报

 楼主| 发表于 2012-3-30 16:03:29 | 显示全部楼层

太谢谢了!!!!!!!!11
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-30 19:55:07 | 显示全部楼层
...........
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 02:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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