2

私はクラスを受講している初心者のプログラマーで、出力文字列を単語間にスペースを入れて印刷することができません。以下は私のコードです。入力した文字列を取得し、プログラムの実行時に指定したように、すべて大文字またはすべて小文字に変更することになっています。MY CODE DOES NOT WORK を入力すると、mycodedoesnotwork が出力されます。なぜスペースを削除するのですか?

 1 #include <stdio.h>
 2 #include <assert.h>
 3 #include <stdlib.h>
 4 #include <string.h>
 5
 6
 7 int shout(char * msgIn, char * msgOut) {
 8
 9         if (!msgIn || !msgOut)
 10                 return -1;
 11         while (*msgIn != '\0') {
 12                 if ('a' <= *msgIn && *msgIn <= 'z')
 13                         *msgOut = *msgIn + ('A' - 'a');
 14                 else
 15                         *msgOut = *msgIn;
 16                 msgIn++;
 17                 msgOut++;
 18         }
 19         *msgOut = '\0';
 20
 21         return 0;
 22 }
 23
 24
 25 int whisper(char const * msgIn, char * msgOut) {
 26         if (!msgIn || !msgOut)
 27                 return -1;
 28         while (*msgIn != '\0') {
 29                 if ('A' <= *msgIn && *msgIn <= 'Z')
 30                         *msgOut = *msgIn + ('a' - 'A');
 31                 else
 32                         *msgOut = *msgIn;
 33                 msgIn++;
 34                 msgOut++;
 35         }
 36         *msgOut = '\0';
 37         return 0;
 38 }
 39
 40 int main(int argc, char ** argv) {
 41         char in[128], out[128];
 42         int i;
 43         for (i = 1; i < argc; i++) {
 44                 if (strcmp("-w", argv[i]) == 0)
 45                         while (scanf("%s", in) != EOF) {
 46                                 whisper(in, out);
 47                                 printf("%s", out);
 48                         }
 49                 else if (strcmp("-s", argv[i]) == 0)
 50                         while (scanf("%s", in) != EOF) {
 51                                 shout(in, out);
 52                                 printf("%s", out);
 53                         }
 54         }
 55         printf("\n");
 56         return 0;
 57 }

4

4 に答える 4

1

呼び出しは単語 (スペースなし)だけscanfを読み込んでおり、文字列を出力するときにスペースを追加していません。

末尾のスペースが気にならない場合は、47 行目と 52 行目を次のように変更してください。printf("%s ", out)

于 2013-10-04T10:21:56.157 に答える
0

スペースはの文字列ターミネータでscanf()ありscanf()、取得する文字列には含まれません。男3スキャン

于 2013-10-04T10:26:26.693 に答える
0

shout()またはwisper()機能の問題ではなく、 の問題scanf()です。

文字列を読み取るように指定する%sと、文字列は空白文字 (スペース、タブなど) で終了します。

そして、それは文字列に含まれません。そのため、文字列の間に入力したスペースはin変数に格納されません。

それを解決するための別のアプローチを考えたいと思うかもしれません。

于 2013-10-04T10:23:12.470 に答える