0

ランダムな大文字の文字列を生成し、ユーザーからの文字とともに大文字のユーザー入力を取得するプログラムを作成しています。ランダム文字列内のユーザー入力文字のインスタンスについては、その文字をユーザーが入力した文字に置き換えます。

例えば、s1 = {BDHFKYL} s2 = {YEIGH} c = '*'

Output = BD*FK*L

プログラムはループに基づいており、置換する別の文字列を入力するかどうかを尋ねます。a'y'を入力して別のループに入ると、次のようになります。

Please enter at least 2 capital letters and a maximum of 20.

HAJSKSMDHSJ

HAJSKSMDHSJ

NWLRBB*QB*C**RZOW**Y*I**Q*C*XR**OWFRX**Y

Would you like to enter another string?

y          -(HERE"S WHERE THE PROBLEM IS)-

Please enter at least 2 capital letters and a maximum of 20.

You need at least two letters

Would you like to enter another string?

助言がありますか?前もって感謝します。

void fillS1(char x[]);

void fillS2(char x[], char y[], char z);

void strFilter(char a[], char b[], char c);

int main(int argc, const char * argv[])
{
    char s1[42];
    char s2[22];

    fillS2(s2, s1, '*');

    return 0;
}

void fillS1(char x[])
{
    for (int i = 0; i < 40; i++)
        x[i] = 'A' + random() % 26;
    x[40] = (char)0;
}

void fillS2(char x[], char y[], char z){
    char loopContinue = 0;

    do {

        int i = 0;

        printf("Please enter at least 2 capital letters and a maximum of 20.\n");
        while (( x[i] = getchar()) != '\n' ) {
            i++;
        }

        x[i] = '\0';

        if (i < 3) {
            printf("You need at least two letters\n");
        }
        else if (i > 21){
            printf("You cannot have more than twenty letters\n");
        }
        else if (i > 0){
            for (i = 0; i < 20; i++) {
                if ((x[i] >= 'A') && (x[i] <= 'Z')) {
                    puts(x);

                    fillS1(y);

                    strFilter(y, x, '*');
                    break;
                }
            }
        }

        printf("Would you like to enter another string?\n");
        scanf("%c", &loopContinue);

    } while (loopContinue != 'n');

}

void strFilter(char a[], char b[], char c){
    int i = 0;
    int n = 0;

    while (n < 20) {
        for (i = 0; i < 40; i++) {
            if (a[i] == b[n]){
                a[i] = c;
            }
        }
        i = 0;
        n++;
    }

    puts(a);
}
4

3 に答える 3

0

使用する場合:

    scanf("%c", &loopContinue);

文字を読み取るだけで、ユーザーが入力した改行は読み取りません。ループの先頭に戻ると、最初getchar()はまだ処理を待っていた改行を読み取ります。

この質問に対する回答を得るには、1 文字だけでなく、行全体を読む必要があります。

于 2012-10-30T01:10:34.233 に答える
0

memset() を使用して x、y、z をクリアしてみてください

于 2012-10-30T03:25:52.197 に答える
0

混合scanfgetcharて、私には悪い考えのようです。getcharユーザーが続行したいかどうかを判断するためにも使用しないのはなぜですか? (そして、大文字と小文字を処理することを忘れないでください。)

改行を読み取ったときに scanf を終了するには、記事を読みたいと思うかもしれません。

于 2012-10-30T01:02:00.137 に答える