三千芳华 发表于 2018-7-26 16:14:44

一个困扰初学者的我但却很简单的问题

#include<stdio.h>
int main()
{
        char ch;
        printf("请输入一个字符\n");
        scanf("%c",&ch);
       
        if('A'<=ch<='Z')
        {
                ch=ch+32;
                printf("%c\n",ch);
        }
        else if('a'<=ch<='z')
        {
                ch=ch-32;
                printf("%c\n",ch);
        }
        else
        {
                printf("输入有误");
        }
       
}
这样写的话除了输入大写字母以外都会出错。比如输入小写a,会得到结果一个 ?
而只要把
if('A'<=ch<='Z')改为if('A'<=ch && ch<='Z')就没问题了,为什么??????

无符号整形 发表于 2018-7-26 16:14:45

因为运算默认是从左到右,所以
'A'<=ch<='Z'相当于先求'A'<=ch(真或假)然后比较刚刚得出的结果是否<='Z',所以会出错。
正确的写法是'A'<=ch && ch<='Z'

BngThea 发表于 2018-7-26 16:23:17

好像c/c++中并不支持连续的比较吧,形如 1 < x < 3

森兔子 发表于 2018-7-26 16:35:33

C语言并不支持连写

Python.爱好者 发表于 2018-7-26 16:36:19

比较并不连续

三千芳华 发表于 2018-7-26 16:40:07

无符号整形 发表于 2018-7-26 16:28
因为运算默认是从左到右,所以
'A'

明白了,这样不管输入啥都当真的算了,所以才会出现这些问题。
页: [1]
查看完整版本: 一个困扰初学者的我但却很简单的问题