为什么该程序无法打印正确的大写字母输出?

时间:2019-11-15 14:53:30

标签: c ascii

#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条件出了什么问题?

4 个答案:

答案 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;
}