楼主你这样写是有问题的,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);
}
看一下打印值问题就明了了。
温馨提示:内容为网友见解,仅供参考