爱问知识人 爱问教育 医院库

c语言高手

首页

c语言高手

oid main()
 {
   int ch;
  scanf("%c",&ch);
  printf("%d",ch);
 }
当输入a时,为什么输出3169,而不是a的ascii码97,int型与字符型不是通用吗

提交回答
好评回答
  • 2008-01-14 17:26:49
    int ch; -> ch 是整数,32位或16位
    scanf("%c",&ch); -〉输入的只是ch的第一个字节,8位,高24位或8位未知
    printf("%d",ch); -〉输出32位或16位整数,高24位或8位未知,低8位为输入的字符的ascii
    改:
    方法一:
    void main() 
    { 
    char ch; 
    scanf("%c",&ch); 
    printf("%d",ch); 
    }
    方法二:
    void main() 
    { 
    int ch; 
    scanf("%c",&ch); 
    ch &= 255;
    printf("%d",ch); 
    }

    2***

    2008-01-14 17:26:49

其他答案

    2008-01-14 17:25:41
  • 实际上,使用LZ的代码,输出3169只是其中的一种情况。
    由于char型与int型在存储上的一致(char型存储的是ASCII值),所以两者在一定程度上是通用的,这种理解没错。
    但是由于两种类型分配的内存字节数不一致(int两个字节,char一个字节),所以在输出时,要考虑实际输出的字节数。
    LZ声明了一个int型,系统分配2个字节,而以char型输入时,只能使用其中的一个低位字节,而且内存中总是会存在一些不确定的数据,同时%d又是以2个字节输出,所以就会出现实际与理解不一致的情况了。
    解决办法:声明int型变量时,同时初始化。如:int ch=0;

    心***

    2008-01-14 17:25:41

类似问题

换一换
  • 程序设计 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):