我的程序的目标是切换输入的两个字母的大小写。例如,转向A和B转为b。当我知道我的逻辑是正确的时,我无法让代码工作。
#include <stdio.h>;
void switcharoo(char *ch1,char *ch2)
{
if(*ch1 >= 'a' && *ch1 <= 'z' && *ch2 >= 'A' && *ch2 <= 'Z')
{
*ch1 = 'A' + *ch1 - 'a';
*ch2 = 'a' + *ch2 - 'A';
}
else if(*ch1 >= 'A' && *ch1 <= 'Z' && *ch2 >= 'A' && *ch2 <= 'Z')
{
*ch1 = 'a' + *ch1 - 'A';
*ch2 = 'a' + *ch2 - 'A';
}
else if(*ch1 >= 'a' && *ch1 <= 'z' && *ch2 >= 'a' && *ch2 <= 'z')
{
*ch1 = 'A' + *ch1 - 'a';
*ch2 = 'A' + *ch2 - 'a';
}
else if(*ch1 >= 'A' && *ch1 <= 'Z' && *ch2 >= 'a' && *ch2 <= 'z')
{
*ch1 = 'a' + *ch1 - 'A';
*ch2 = 'A' + *ch2 - 'a';
}
}
int main()
{
char lettera,letterb;
printf("Please input a first character: ");
scanf("%c", &lettera);
printf("Please input a first character: ");
scanf("%c", &letterb);
switcharoo(lettera,letterb);
printf("%c\n %c\n",lettera,letterb);
return 0;
}
答案 0 :(得分:4)
scanf("%c", &lettera);
scanf("%c", &letterb);
这可能不是你想要的。您输入第一个字母后可能输入的换行符(输入)(如果您的提示暗示您希望它们在不同的行上),将作为第二个字母读入。您必须输入两个字母然后换行才能成功读取lettera
和letterb
...只需提示一次即可获得2个字符。此外,最好检查scanf
的返回值,以确保它获得您所请求的输入....
答案 1 :(得分:3)
除非我需要创建自己的函数,否则我会使用#include <ctype.h>
函数来让我的生活更轻松。
#include <ctype.h>
#include <stdio.h>
int main()
{
char lettera,letterb;
printf("Please input a first character: ");
scanf("%c", &lettera);
printf("Please input a first character: ");
scanf(" %c", &letterb); // note the space in front of %c to flush '\n'
// lettera conversion
if(isupper(lettera)) {
lettera = tolower(lettera);
} else if (islower(lettera)) {
lettera = toupper(lettera);
}
// letterb conversion
if(isupper(letterb)) {
letterb = tolower(letterb);
} else if (islower(letterb)) {
letterb = toupper(letterb);
}
printf("%c\n %c\n",lettera,letterb);
return 0;
}
答案 2 :(得分:0)
你应该致电
switcharoo(lettera,letterb);
as
switcharoo(&lettera,&letterb); //passing address of lettera and letterb
当你在函数中使用char *
时。
答案 3 :(得分:0)
您的代码无法运行。编译器会给出错误,因为con不能将char转换为char *。
尝试按照Rohan建议的方式调用您的函数。
或者您可以简化您的功能。仅将其用于一个参数并调用两次。
char changeCase(char ch) {
if (ch >= 'A' && ch <= 'Z')
ch -= 32;
if (ch >= 'a' && ch <= 'z')
ch += 32;
return ch;
}
主要是你可以写,
char lettera, letterb;
//get values of lettera and letterb
lettera = changeCase(lettera);
letterb = changeCase(letterb);