1

使用できる変数の数が限られているため、変数を 1 つだけ使用して次の問題を解決したいと考えています。出来ますか?

  char str[100];
  // Type three words:
  printf("Type three words: ");
  scanf("%s %s %s",str,str,str);
  printf("You typed in the following words: \"%s\", \"%s\" and \"%s\"\n",str,str,str);

次の入力により、次の出力が得られます。

Type three words: car cat cycle
You typed in the following words: "cycle", "cycle" and "cycle"

最後に読み取った単語が同じ char 配列の先頭に格納されるため、これは奇妙ではありません。これに対する簡単な解決策はありますか?

4

7 に答える 7

2

各単語をバッファの同じアドレスに割り当てているため、最初に車で、次に猫で、最後にサイクルで上書きされます。

2D配列を使用してみてください。1つの次元は含まれる単語であり、もう1つは保持する文字数であり、20文字の場合は21、ゼロ終端は1つです。

char str[3][21];
// Type three words:
printf("Type three words: ");
scanf("%s %s %s",str[0],str[1],str[2]);
printf("You typed in the following words: \"%20s\", \"%20s\" and \"%20s\"\n",str[0],str[1],str[2]);

このコードは 20 行を超えるワードを読み取らないため、バッファのオーバーフローやメモリ アクセス違反を防止できます。scanf フォーマット文字列 %20s は、読み取りを 20 文字に制限します。

于 2013-08-03T09:53:15.283 に答える
1

単語の長さがわかっている場合は、次のようなことができます。

scanf("%s %s %s",str,&str[30],&str[70]);

次の方法で表示します。

printf("You typed in the following words: \"%s\", \"%s\" and \"%s\"\n",str,str[30],str[70]);

しかし、それは本当にエレガントでも安全でもありません。

于 2013-08-03T09:53:23.423 に答える
1

これは最悪の方法ですが、それでも:

入力文字列にランダムなサイズを使用するだけ

char str[100];
  // Type three words:
  printf("Type three words: ");
  scanf("%s %s %s",str,str+22,str+33);
  printf("You typed in the following words: 
          \"%s\", \"%s\" and \"%s\"\n",str,str+22,str+33);
于 2013-08-03T09:53:32.173 に答える
0

2 次元配列を使用できます。

char str[3][30];

printf("Type three words: ");
scanf("%s %s %s", str[0], str[1], str[2]);

printf("You typed in the following words: \"%s\" \"%s\" \"%s\"\n", str[0], str[1], str[2]);
于 2013-08-03T10:01:02.080 に答える
0

あなたは、単一の変数しか使用できないと言います。その 1 つの変数を単一の文字列 (char の配列) にする代わりに、文字列の配列 (char の 2D 配列) にします。

于 2013-08-03T09:53:06.053 に答える
0

入力名の文字数が 9 などの特定の数未満であることが保証されている場合は、次のように使用できます。

printf("Type three words: ");
scanf("%s %s %s",str,str + 10,str + 20);
printf("You typed in the following words: \"%s\", \"%s\" and \"%s\"\n",str, str + 10, str + 20);
于 2013-08-03T09:54:00.527 に答える