4

私の仕事は、ユーザー入力を確認し、各ピリオドを感嘆符に置き換え、各感嘆符を2つの感嘆符に置き換えてから、行われた置換の数を数えることです。

これは私のコードです:

int main(void)

{

    int userInput, substitutionsNum = 0;

    printf("please enter your input:\n");
    while ((userInput = getchar()) != '#')
    {
        if (userInput == '.')
        {
            userInput = '!';
            ++substitutionsNum;
        }

        else if (userInput == '!')
        {
            userInput = '!!';
            ++substitutionsNum;
        }
    }

    printf("%c, the number of substitutions are: %d", userInput, substitutionsNum);
    return 0;
}

入力「nir」を入力すると。次に「#」を押してプログラムを終了すると、出力は「#、置換の数は次のとおりです:1」になります。

4

3 に答える 3

2

最後に1回を除いて、入力を印刷して戻すことはないため、「置換」は機能しません。

また、感嘆符のペアをとして表すことはできません'!!'。これは、同じではない複数文字のリテラルです。少なくとも、たとえば印刷しようとした場合、I/O関数は期待どおりの動作をしません。

于 2013-01-28T14:16:54.210 に答える
1
!! 

2文字です。あなたはそれを単一のキャラクターとみなします。

そして、あなたは同じ変数でを上書きしていますuserInput

必要に応じてインデックスを調整できるように、もう1つのcharバッファを使用できます。たとえば、「!!」を保存する場合は、インデックスを2つ増やします。

于 2013-01-28T14:17:33.227 に答える
0

あなたはそれを誤解している。累積された変更された入力を文字配列(つまりchar buffer[1024])に格納し、そこに置換を配置する必要があります。アルゴリズムでは、出力するのはuserInput変数の最後の値だけです。

これはおそらく宿題なので、 C言語での文字列操作についてもっと読むことをお勧めします。

于 2013-01-28T14:16:38.757 に答える