在编写简单程序时,我在 c 比较中发现了奇怪的行为。 这是我的代码:
#include <stdio.h>
#define MAXLEN 1000
void lowerrr(char inp[]);
//BQhiuIGEIBEIuo2jehgUIGIUGIUg3iuoOgklOIhp__rvknzioUFIU#Gnf%
int main(){
char inp[] = "BQhiuIGEIBEIuo2jehgUIGIUGIUg3iuoOgklOIhp__rvknzioUFIU#Gnf";
lowerrr(inp);
printf("%s",inp);
return 0;
}
void lowerrr(char inp[]){
for (int i = 0; inp[i] != '\0'; ++i){
printf("%d", ('A' <= inp[i] <= 'Z'));//always true
//printf("%d", (inp[i] >= 'A' && inp[i] <= 'Z')); work normaly
(inp[i] >= 'A' && inp[i] <= 'Z') ? inp[i]+= 'a' - 'A' : inp[i] ;
}
}
我不明白为什么这个比较 ('A' <= inp[i] <= 'Z') 总是给出 true(并且不能正常工作)但是这个 (inp[i] >= 'A' && inp [i] <= 'Z') 工作正常吗?请给我解释一下。
答案 0 :(得分:0)
C 不支持复合条件,例如 Python 支持。这里发生的事情是你将有两个从左到右链接的条件。首先评估 'A' <= inp[i]
是返回 true 或 false,即 0
或 1
。然后针对 <= 'Z'
评估该条件的结果,如您所见,它的两个可能结果都小于 Z
,因此整个条件将始终评估为真。