发布网友 发布时间:2022-04-23 12:32
共4个回答
热心网友 时间:2023-10-14 20:36
没有问题啊,虽然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;
}
运行结果:
热心网友 时间:2023-10-14 20:37
问题在使用了scanf这个函数。scanf对变量的类型与控制符的类型对应要求是很严格的,用%c控制输入int型变量a是不妥的。你换成a=getchar();,相信就没有什么问题了。原来的代码实际上if(a>='a'&&a<='z')这里无论输入大写还是小写都不执行,一直在执行else后的语句,所以输入大写时+32变成了小写,而输入小写时+32就走出字符范围了,没有对应的字符,编译器就用?代替输出了。使用类型敏感函数scanf时这一点要特别注意。如果非要使用scanf,那把if()的()中的变量要强制一下,可以写成if ((char)a>='a'&&(char)a<='z')也应该是可以的。供参考。追问好了,懂了
热心网友 时间:2023-10-14 20:37
因为,根本没有走进if (a>='a'&&a<='z')这个逻辑热心网友 时间:2023-10-14 20:38
取值范围不同,int 取值范围 -32768到+32767,char 的取值范围 -128到+127。