奇怪的行为 c 比较

时间:2021-06-28 09:30:44

标签: c

在编写简单程序时,我在 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') 工作正常吗?请给我解释一下。

1 个答案:

答案 0 :(得分:0)

C 不支持复合条件,例如 Python 支持。这里发生的事情是你将有两个从左到右链接的条件。首先评估 'A' <= inp[i] 是返回 true 或 false,即 01。然后针对 <= 'Z' 评估该条件的结果,如您所见,它的两个可能结果都小于 Z,因此整个条件将始终评估为真。

相关问题