0

私のプログラムの目標は、入力された 2 文字の大文字と小文字を切り替えることです。たとえば、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);

これはおそらくあなたが望むことをしていません。最初の文字を入力した後におそらく入力する改行 (入力) 文字 (プロンプトが別の行にあることを示唆している場合) は、2 番目の文字として読み込まれます。lettera2文字を入力してから、改行を入力して正常に読み込む必要がありますletterb... 2文字に対して1回だけプロンプトを表示できます。また、戻り値をチェックして、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

コードは実行されません。conがcharをchar*に変換しないため、コンパイラはエラーを出します。

Rohanが提案した方法で関数を呼び出してみてください。

または、関数を単純化することもできます。1つのパラメーターにのみ使用し、2回呼び出します。

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 に答える
0

You should call

switcharoo(lettera,letterb);

as

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

as you are taking char * in the function.

于 2013-03-11T04:28:03.917 に答える