石头3494 发表于 2016-12-6 14:06:25

很是疑惑C中的 && 还有这鬼现象WTF??

ude <stdio.h>

int main()
{
      char key;

      printf("请输入一个字符:");
      scanf("%c",&key);
                                                                        //                        这个是板块练习题里面的转换字符大小写的小玩意,但是,发现了让人郁闷的事情
      if('A'<= key && key<= 'Z')    //这里这里,很是疑惑的 现在用&&是正常转换字符大小写的呢,现在还是正常的代码 请往下面看
      {
                key+=32;
      }
      else if('a' <= key && key <= 'z')
      {
                key-=32;
      }

      printf("您输入的字符经过转换后输出为:%c\n",key);

      return 0;
}






#include <stdio.h>

int main()
{
      char key;

      printf("请输入一个字符:");
      scanf("%c",&key);

      if('A'<= key <= 'Z')    //之前玩过会JAVA 所以习惯性地。。结果。。看图片吧 诶 几个小时也没调试出来到底什么原因
      {
                key+=32;
      }
      else if('a' <= key && key <= 'z')
      {
                key-=32;
      }

      printf("您输入的字符经过转换后输出为:%c\n",key);

      return 0;
}

呆鸭 发表于 2016-12-6 14:06:26

石头3494 发表于 2016-12-6 14:54
请问下那这个连续不等式会等价于什么呢可以告知下吗

'A' <= key <= 'Z' 等价于('A' <= key)<='Z',也就是先比较左一左二,比对后的结果再跟右一比。
左一左二比对结果不是true(1)就是false(0),不管是1或0,跟'Z'比一定是小于,所以原式恒成立。
C语言有很多陷阱,下面再举一"恒为true"的例子给楼主玩玩:
if (key = 'z')
        {
                printf("true");
        }
        else
        {
                printf("false");
        }

石头3494 发表于 2016-12-6 14:09:40

&&这个符号的意思不是   '与'的意思吗,虽然是有短路的原理,直接用
'A' <= key <= 'Z'   替换 'A' <= key && key <= 'Z' 就发生了问题了,小弟实在搞不懂,大神在哪里呀{:10_266:}

fengzhizijia 发表于 2016-12-6 14:17:03

C语言里没有连续不等式

石头3494 发表于 2016-12-6 14:54:08

fengzhizijia 发表于 2016-12-6 14:17
C语言里没有连续不等式

请问下那这个连续不等式会等价于什么呢可以告知下吗

石头3494 发表于 2016-12-6 16:04:51

呆鸭 发表于 2016-12-6 15:46
'A'

谢谢了~~    话说等号的问题基本不会发生啦 以前玩JAVA的时候就被坑惨了无力吐槽 C语言这么多坑等人跳的啊苦逼逼的{:10_266:}

四十二 发表于 2016-12-9 02:37:06

四楼赛高,c里没有连续不等式
页: [1]
查看完整版本: 很是疑惑C中的 && 还有这鬼现象WTF??