0

我的程序的目标是切换输入的两个字母的大小写。例如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;
}
4

4 回答 4

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

这可能不是你想要的。您可能在输入第一个字母后键入的换行符(输入)字符(假设您的提示暗示您希望它们在不同的行上)将作为第二个字母读入。您必须输入两个字母,然后输入一个换行符才能将它们读入您的letteraletterb成功...只能提示一次输入 2 个字符。此外,检查的返回值scanf以确保它得到您请求的输入是一种很好的做法......

于 2013-03-11T04:32:20.670 回答
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;
}
于 2013-03-11T04:33:24.110 回答
0

你应该打电话

switcharoo(lettera,letterb);

作为

switcharoo(&lettera,&letterb); //passing address of lettera and letterb

当您正在char *使用该功能时。

于 2013-03-11T04:28:03.917 回答
0

您的代码将无法运行。编译器将给出错误,因为 con not convert char to 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);
于 2013-03-11T04:44:15.397 回答