int 与 char型在 0-255内可以通用,为什么下面程序输入字符,不能正常显示ascII码?

#include <stdio.h>
void main()
{
int a;
scanf("%d",&a);
printf("%d\n",a);
}
如果输入a的话,得到的是奇怪的数字?改成char a 就好了。

楼主你这样写是有问题的,int占用2个字节,char只占一个字节,所以你输入一个字符型a的话,就相当于把一个8位的地址值赋给一个16位的地址值,编译器可能无法确认这两者之间的转换关系,因而产生乱码。至于乱码是你没有给a初始化,a的值本身就是不确定的,当然有的编译器可能会给a初始化。
也就是当你scanf输入的是一个8位的char型,然后把他赋值给一个没有初始值的16位int型。改成char a的话,是把一个8位的地址赋给一个8位的地址,所以不会出现问题
另,scanf是一个函数返回一个int型数值,一般返回一个正数证明赋值成功否则失败.所以你可以加上一个判断语句判断一下scanf是否调用成功。更改如下
#include <stdio.h>
int main()
{
int a=0; //给a一个初值
printf("a的初始值是%d\n",a);
if(scanf("%d",&a)) //判断scanf调用是否成功
printf("赋值成功,a的值是%d\n",a);
else
printf("赋值失败,a的值是%d\n",a);
}
看一下打印值问题就明了了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-02-16
原因很简单,因为a是一个整数,而你输入的是一个非整数,不满足scanf参数要求导致的,int和char型数据在0-255内可以相互装换,意思是这样的,比如你输入一个字符‘a’,用整型输出它,或者你输入一个整数97,用字符输出它!下面给出一个示例!输入整数,输出字符,反之类似!
#include <stdio.h>
void main()
{
int a;
scanf("%d",&a);
printf("%c\n",a);
}
所以你上面的程序错在了输入上面,而非程序本身的问题!
第2个回答  2012-02-16
#include <stdio.h>
void main()
{
int a;
scanf("%d",&a);
printf("%d\n",(char)a);//你原本那样只能输出整形的a,你按照我这样就可以输出asc了
}
相似回答
大家正在搜