#include<stdio.h>
int main() {
char a;
printf("enter a letter");
scanf("%c", & a);
if (a >= 'A' || a <= 'Z') {
a = a + 32;
} else if (a >= 'a' || a <= 'z') {
a = a - 32;
}
printf("%c", a);
return 0;
}
if
条件已正确执行,但是else
条件出了什么问题?
答案 0 :(得分:3)
您应该将条件更改为
if(a>='A' && a<='Z'){
a=a+32;
}
else if(a>='a' && a<='z'){
a=a-32;
}
检查两者的上限和下限。否则,if (a>='A' || ....)
将用完大写或小写字母的所有输入。
答案 1 :(得分:1)
让我们从字母ASCII codes开始。大写字母以A
的65到Z
的97开头。小写字母从a
的97开始到z
的122。
现在,以您的条件if(a>='A'||a<='Z')
为例,它说明所有大于或等于A
的值(65)或小于或等于{{ 1}} 。这是一个问题,因为任何小写字母的每个 ASCII码都比Z
的代码更大,也就是说,每个小写字母的更大比A
。由于此条件使用A
(或)运算符,因此每次||
为真时,它将短路并进入条件的主体。
为了检查字母的范围,您应该将其更改为:
a>='A'
现在,您的条件语句使用if(a>='A' && a<='Z'){
a=a+32;
}
else if(a>='a' && a<='z'){
a=a-32;
}
(和)运算符,该运算符必须评估为真实的两个部分,&&
和 a>='A'
,以便输入条件的正文。这样,您可以确保要检查的字母位于指定的大写或小写字母范围内。
答案 2 :(得分:0)
如果要翻转大小写,并且输入了大写字母,则会由于“ else”而忽略第二个“ if”。
答案 3 :(得分:0)
您应该使用 && 而不是 || 。这将约束您要输入的条件。片段显示如下:
#include<stdio.h>
int main() {
char a;
printf("enter the alphabet");
scanf("%c", & a);
if (a >= 'A' && a <= 'Z') {
a = a + 32;
}
else if (a >= 'a' && a <= 'z') {
a = a - 32;
}
printf("%c", a);
return 0;
}