关于int和char在字母大小写输出时的有关问题

关于int和char在字母大小写输出时的问题
#include<stdio.h>

int main()
{
char a;

printf("Input a Character:");
scanf("%s",&a);

if(a>=65&&a<=91)
printf("%c\n",a+32);
else if(a>=97&&a<=113)
printf("%c\n",a-32);
else
printf("%c\n",a);

return 0;
}


#include<stdio.h>

int main()
{
int a;

printf("Input a Character:");
scanf("%s",&a);

if(a>=65&&a<=91)
printf("%c\n",a+32);
else if(a>=97&&a<=113)
printf("%c\n",a-32);
else
printf("%c\n",a);

return 0;
}


新手求解一下为什么上面第一段代码可以将大写字母输出小写而小写字母输出大写。但是第二段中把a改为int类型之后就不可以了。不是说char变量实际存储的也是整数,所以在%d时输出ACSII码而%c时输出字符吗?那按理说int反过来也可以啊。
求救啊各位大大们。

------解决方案--------------------
引用:
引用:引用:引用:在定义a时,你把它定义为int型的,同来存储char型的数据,虽然可以运行程序,但是实际在a中存储的数据是错误的,已经超过ACSII码的范围,你可以在读入a后再以int型输出一下,看看结果。嗯,谢谢啊,已经测试了一下,应该是在int里面%c输……

很遗憾没帮到你,我也不太懂,你为什么一定要往int型的数据中存储char型的数据呢?按正常的格式来写程序是完全不会出错的啊?
------解决方案--------------------
把a改为int类型之后,是可以打印出你要的结果的,但是前提是你在定义a的时候初始化。 可以试试

上面出错的原因是:
你在 int a;后,内存中为你的a分配了4个字节的空间,你没初始化,所以a中的数据是不确定的
可能是 CB CC AB EF 这样(左边是低字节,右边是高字节),
接下来的scanf("%s",&a); 把你输入的字符存入a中,a就变成了0a 00 AB EF(也可能是CB CC 00 0a,看你的
系统是大端对齐还是小端对齐),取a来比较时,取的是4个字节内的数据,最后只能是else了,取一个字节的
内容打印,

另外scanf("%s",&a); 用%s ,你存入的不只是输入的字符,后面还有一个字符串结束符'\0'的