-1

文字列 " A = B" を読み取り、変数の配列で B を検索するプログラムを作成する必要があります。B が見つからない場合は、その値を尋ねて別の配列に入れます。アイデアが明確かどうかはわかりませんが、例を次に示します。

  while(1){
  printf("Get string\n");
  gets(L);


  if(L[0]=='\0') break;

  if(L[2] == '1') {
          printf("Value of 1: ");
          scanf(" %lf", &m);

          }

          }
  printf("\nbreak");

Enter キーを押したときにこのプログラムを停止する必要があるため、if(L[0]=='\0') break; を使用しました。それのための。

私の問題は次のとおりです。Bの値を尋ねるたびに、私のプログラムは「ゴースト文字列」Lを読み取ります。つまり、Lの値を入力できず、プログラムが停止します。文字列をほぼ二重に読んでいますが、条件 L[0] != '\0' のために壊れています。私は何を間違っていますか?この条件を削除すると、プログラムは文字列を 2 回入力するように求めずに、「Get string」を 2 回出力します。

4

3 に答える 3

2

を(決して)使用しないでくださいgets()。良くない。

fgets()改行を格納することに注意して、代わりに使用してください。高レベル関数 ( などsscanf()) を使用して、入力を解析します。同様に、別のfgets()+sscanf()コンボを使用して値の読み取りを行います。

于 2013-09-11T12:32:04.707 に答える
0

scanf は行末記号を消費せず、その前に入力されたものだけを消費します。したがって、 gets() は行末記号を見て、空の文字列を返します。

于 2013-09-11T12:36:22.180 に答える
0

エラー(ファイルの終わりを含む)をチェックしないため、間違っています。2回読んでいるのはそのためです。

代わりに例えば

while ((fgets(L, sizeof(L), stdin) != NULL)
{
    /* ... */
}
于 2013-09-11T12:33:39.203 に答える