C 切换字符大小写、指针问题

C 切换字符大小写、指针问题,c,pointers,C,Pointers,我的程序的目标是切换输入的两个字母的大小写。例如,a变成a,B变成B。当我知道我的逻辑正确时,我很难让代码正常工作 #include <stdio.h>; void switcharoo(char *ch1,char *ch2) { if(*ch1 >= 'a' && *ch1 <= 'z' && *ch2 >= 'A' && *ch2 <= 'Z') { *ch1 = 'A'

我的程序的目标是切换输入的两个字母的大小写。例如,a变成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;
}
#包括;
void switcharoo(char*ch1,char*ch2)
{
如果(*ch1>='a'&&&*ch1='a'&&&*ch2='a'&&&*ch1='a'&&*ch2='a'&&*ch1='a'&&&ch1='a'&&ch2您应该调用

switcharoo(lettera,letterb);
作为

当您在函数中使用
char*

scanf("%c", &lettera);
scanf("%c", &letterb);

这可能不是您想要的。您可能在输入第一个字母后键入的换行符(enter)(假设您的提示意味着您在不同的行中需要它们)将作为第二个字母读入。您必须键入两个字母,然后换行,才能将它们读入您的
lettera
letterb
中。只需提示一次,输入两个字符。此外,最好检查
scanf
的返回值,以确保它获得了您请求的输入….

除非我需要创建自己的函数,我会使用
#include
函数来简化我的生活

#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;
}
#包括
#包括
int main()
{
字符字母A,字母B;
printf(“请输入第一个字符:”);
scanf(“%c”和字母a);
printf(“请输入第一个字符:”);
scanf(“%c”,&letterb);//注意%c前面的空格以刷新“\n”
//字母转换
如果(isupper(lettera)){
lettera=tolower(lettera);
}else if(岛下(字母A)){
lettera=toupper(lettera);
}
//字母B转换
如果(isupper(字母B)){
letterb=tolower(letterb);
}else if(岛下(字母B)){
letterb=toupper(letterb);
}
printf(“%c\n%c\n”,字母a,字母b);
返回0;
}

您的代码将不会运行。编译器将给出错误,即con not con con con con con con con con con con con con con con con con con con con con con con con con con con con con

尝试按照Rohan建议的方式调用您的函数

或者你可以简化你的函数。只对一个参数使用它并调用它两次

char changeCase(char ch) {
  if (ch >= 'A' && ch <= 'Z')
    ch -= 32;
  if (ch >= 'a' && ch <= 'z')
    ch += 32;
  return ch;
}

等等,
switcharoo
为什么需要同时处理两个字符?请简化。因为我的作业是这么说的;[@JonathonReinhart,任何没有意义的问题都会变成作业:)@BarathBushan不是开玩笑的人。我理解给学生布置的作业会迫使学生学习函数、按引用参数等。但是一些有用的、遵循一些在现实世界中使用的模式的东西怎么样?天哪。制作一个处理单个字符的函数,并调用它两次?或者这太离题了尝试了这个,然后我的代码就不再调用这个函数,继续输入同一个字母两次。这可能是
scanf
的问题。对于字符,尝试使用
getc
读取字符。哦哦哦哦哦哦哦哦哦哦哦哦哦哦,该死。谢谢!@dLiGHT,如果不是你的程序,至少让你的注释看起来很美观 :)
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);