一个简单的C程序字符范围问题~~~

来源:百度知道 编辑:UC知道 时间:2024/05/15 14:10:32
有一段C程序,意思是把输入的字母按后面第4位的字母输出,实现简单的加密,即输入A,显示的是E,
输入W,显示的是A……
#include "stdio.h"
main()
{
char c;
while((c = getchar()) != '\n')
{
if((c >= 'a' && c <= 'z') || ( c >= 'A' && c <= 'Z'))
{
c += 4;
if( c > 'Z' && c <= 'Z' + 4 || c > 'z')
c -= 26;
}
printf("%c",c);
}
}
这段程序虽然可以正确的运行,但是为什么不能把if( c > 'Z' && c<= 'Z' + 4 || c > 'z')这句改成if( c > 'Z' && c <= 'Z' + 4 || c > 'z' && c <= 'z' + 4)呢???既然对大写的超出范围做限制,为什么不也对小写的范围做严格限制呢?而只是简单的写成c > 'z'就行了呢??想了半天也想不通~~请大家帮忙告诉我。。。

大写的限制是因为小写的ASC码总是大于大写,所以如果只是c > 'Z' 那么所有的小写都减26,所以限制<'Z'+4
然而已经‘if((c >= 'a' && c <= 'z') || ( c >= 'A' && c <= 'Z'))
即已经确定被加4的字符是字母,所以大于小写z的肯定是需要减26
应该明白了吧!

因为用不到

可以这样写
if( (c > 'Z' && c <= 'Z' + 4) || (c > 'z' && c <= 'z' + 4))

当然原来的程序也对的.因为c<='z'+4是永远都成立的可以不用写