在循环的情况下
while ((ch < 'A' && ch > 'Z' ) || (ch < 'a' && ch > 'z') || ch != '.');
例如因此子表达式
(ch < 'A' && ch > 'Z' )
始终计算为逻辑假,因为一个字符不能同时小于'A' 和大于'Z'。
为了简化条件,首先针对应该中断循环的情况重写它。
循环中断时
( ( 'A' <= ch && ch <= 'Z' ) || ( 'a' <= ch && ch <= 'z') || ( ch == '.' ));
现在写下它的否定
!( ( 'A' <= ch && ch <= 'Z' ) || ( 'a' <= ch && ch <= 'z') || ( ch == '.' ));
你会得到
( !( 'A' <= ch && ch <= 'Z' ) && !( 'a' <= ch && ch <= 'z') && !( ch == '.' ));
它与
( ( !('A' <= ch ) || !( ch <= 'Z' ) ) && ( !( 'a' <= ch ) || !(ch <= 'z' )) && ( ch != '.' ));
或者
( ( ch < 'A' || ch > 'Z' ) && ( ch < 'a' || ch > 'z' ) && ( ch != '.' ));
所以你会有
while ( ( ch < 'A' || ch > 'Z' ) && ( ch < 'a' || ch > 'z' ) && ( ch != '.' ));
另一种方法是使用标头<ctype.h>中声明的标准函数tolower或toupper来简化条件,例如
while ( ( toupper( ( unsigned char )ch ) < 'A' || toupper( unsigned char )ch ) > 'Z' ) && ( ch != '.' ));