我正在制作一个程序,如果用户输入小写字符,就会生成大写字符,反之亦然。我使用了一个函数,以便根据ASCII
表将字符转换为小写或大写。小写到大写的转换正确,但大写到小写的转换不正确。
char changeCapitalization(char n)
{
//uppercase to lowercase
if(n>=65 && n<=90)
n=n+32;
//lowercase to uppercase
if(n>= 97 && n<=122)
n=n-32;
return n;
}
其他人本质上说的是你想要这样的东西(从下到上逻辑中的"else-if"而不是"if"):
char changeCapitalization(char n)
{
if(n>=65 && n<=90) //uppercase to lowercase
n=n+32;
else if(n>= 97 && n<=122) //lowercase to uppercase
n=n-32;
return n;
}
更改线路
if(n>= 97 && n<=122)
带有
else if(n>= 97 && n<=122)
因为这个条件与您在问题
按顺序执行两个if
语句。因此,如果您有一个大写字符,它将首先转换为小写,然后,下一个if
语句将把它转换回小写。如果只想在第一个条件不成立的情况下检查第二个条件,请将else
放在第二个if
之前。
此外,您可以将字符相互比较:if (n >= 'A' && n <= 'Z')
,而不是直接使用ASCII代码。
稍后,当您更熟悉编程并开始执行更大的项目时,您应该使用该语言的内置函数来处理字符串和字符,如islower()
和isupper()
。如果您需要支持任何非英语字符,您应该阅读这篇关于编码国际字符的复杂性的好文章。