想写一个程序,输入小写字母时,输出大写字母,输入大写字母,输出小写字母。
#include <stdio.h>
int main()
{
int a;
scanf("%c",&a);
if (a>='a'&&a<='z')
{
a=a-32;
}
else
{
a=a+32;
}
printf("%c\n",a);
return 0;
}
这个程序运行,输入大写字母可以正常输出小写字母,输入小写字母却输出“?”,这是什么原因?
将int改成char之后,大小写字母可以正常转化了,程序完美运行。
所以int 和char到底怎么用,为什么这个程序用int可以由大写字母转小写,却不能由小写字母转大写??
没有问题啊,虽然int表示的范围比char大,但是在合理的输入情况下并不会出现你所说的情况。
代码:
#include
int main()
{
int a[4]={'a','z','A','Z'};
for(int i=0;i<4;i++)
printf("%c\t",a[i]);
printf("\n");
for(int i=0;i<4;i++)
if(a[i]>='a'&&a[i]<='z')
{
a[i]=a[i]-32;
}else{
a[i]=a[i]+32;
}
for(int i=0;i<4;i++)
printf("%c\t",a[i]);
return 0;
}
运行结果:
好了,懂了
本回答被提问者和网友采纳为什么把int改成char,就可以执行a=a-32了?
追答看你的编译器了,我这int是8个字节,char转成int后,高位前4个字节用1补全,后3个字节用1100补全,最后1个字节才是char的值。
最后得到的就是一个很大的负值,所以a的值不在这个范围,if(a>='a'&&a<-'z')。
如果是它本身存char,那自然只有1个字节了,输入小写字母自然就在这个范围了
谢谢你的回答,但是抱歉没能采纳你
那为什么用int,小写字母不能转化大写字母呢?而用char就可以了
那为什么用int,小写字母不能转化大写字母呢?而用char就可以了
追答你的程序没有任何问题,我不知道为什么大写不能转小写。我用你的程序运行是可以大写转小写的。
main()
{
int a;
scanf("%c",&a);
if(a>='a'&&a<='z') a-=32;
else a+=32;
printf("%c",a);
}
这是你的程序,我只是精简了一下
追问嗯,这个程序正常运行的话,输入A就会输出a,输入a就会输出A,但是我的程序不行,输入a就输出问号
追答现在和你的完全一样了,照样没问题
#include
int main()
{
int a;
scanf("%c",&a);
if(a>='a'&&a<='z')
{
a=a-32;
}
else
{
a=a+32;
}
printf("%c\n",a);
return 0;
}