#include <stdio.h>
#include<string.h>
int main(void){
char str[20];
int i=0;
fgets(str,100,stdin);
for(i=0;str[i]!='\0';i++){
if(str[i]>='a'&&str[i]<='z')
{
str[i]-=32;
} //将第一个if语句放在前面,则小写字母可以转换成大写字母,但是无法完成第二个if语句功能,同理,将第二个if语句放前面,也只能完成第二个if语句,为什么,怎么改
if(str[i]>='A'&&str[i]<='Z'){
str[i]+=32;
}
}
puts(str);
return 0;
}
改为if,else if
不要连写两个if
否则你前面的if改成小写,后面的if就给改回来
要让它只能匹配一个,不要两个按顺序都匹配一次
因为你第一个if把小写换大写,或者大写换小写了,那么第二个if判断结果每次都为假。。自然不会执行。 所以逻辑你搞错了
只需要把第二个if前加个else即可
用库函数isupper() tolower() islower() toupper()不行吗
你要实现什么功能?大写只能转小写,小写只能转大写,这个是单一功能,你的输出是要实现全部是大写字母?小写字母?还是原来大写字母变小写,小写字母变大写?
str[i]^=32;无需判断