char c;
while((c=getchar())!='\n')
{if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
{c=c+4;
if(c>='Z'&&c<='Z'+4||c>'z')
c=c-26;
}
printf("%c",c);
}
printf("\n");
if(c>='Z'&&c'z')
大哥 小弟想知道是,为什么小写字母'z'没有进行,c>='z'&&c'z'呀
c>='Z'&&c'z',这句话你需要从结合律和优先级看这个问题,>=、的优先级比&& 和||高,也就是说:(c>='Z') && (c'z');其次从结合律来看,&&和||是左结合的,也就是说,这个判断条件可以划分为:((c>='Z') && (c'z'),这下应该能看明白了吧,也就是说当前面的((c>='Z') && (c'z')为真,则执行if内语句,只有当两个都为假时,才不执行if内语句。
回答你为什么不写成:c>='z'&&c<='z'+4,你可以去看一下ASCII码表,因为大写的字母的ASCII码值为:65--90,小写的为:97--122,如果前面不写&&c<= 'Z'+4,的话,你输入的小写的a就会执行c=c-26,从而变成大写的K,很显然你不想让他这样。但是后面就不用判断这个了,因为如果值在199-122的话,c=c-26其实就是首尾相接的小写字母,你可以对照ASCII码表看看。
希望对你有帮助。
if(c>='Z'&&c'z')
大哥 小弟想知道是,为什么小写字母'z'没有进行,c>='z'&&c'z'呀
看ASC II码,小写字母比大写字母数值大,所以在判断大写字母时需要判断c 'z'就可以了,因为在前面已经判断是否为字符了,以上。