一个困扰初学者的我但却很简单的问题
#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')就没问题了,为什么?????? 因为运算默认是从左到右,所以
'A'<=ch<='Z'相当于先求'A'<=ch(真或假)然后比较刚刚得出的结果是否<='Z',所以会出错。
正确的写法是'A'<=ch && ch<='Z' 好像c/c++中并不支持连续的比较吧,形如 1 < x < 3 C语言并不支持连写 比较并不连续 无符号整形 发表于 2018-7-26 16:28
因为运算默认是从左到右,所以
'A'
明白了,这样不管输入啥都当真的算了,所以才会出现这些问题。
页:
[1]