1

ここにコードがあります:

Tree *rangeprint(Tree *t) {
  char first[20];
  char last[20];
  int f = 0;
  int l = 0;

  printf("First Entry?\n");

  while(1) {
    first[f] = getchar();
    if(first[f] == '\n') {
      first[f] = '\0';
      break;
    }
    f++;
  }

  printf("Last Entry?\n");

  while(1) {
    last[l] = getchar();
    if(last[l] == '\n') {
      last[l] = '\0';
      break;
    }
    l++;
  }

  printf("%s %s\n", first, last);
}  

このコードを実行すると、コンソールに次のような出力が表示されます。

First Entry?
Last Entry?

while ループをスキップして実行前にすべてを出力するのはなぜですか?

更新 - 終了条件を '\n' ではなく 'x' に変更したところ、正しく表示されるようになりました。

ループが始まる前にランダムな getchar() を追加すると、問題が修正されます。これは、'\n' がそこに読み込まれるためです。

4

4 に答える 4

2

それはそれらを印刷しています、それはそれらが空の文字列であることだけです! (ヒント: fandlは変わりません - を使用した最後のループfはタイプミスだと思います!)

于 2013-01-08T17:00:49.960 に答える
0

f入力から文字を読み取っている間、ポインタを進めていません。あなたは常にロケーション0でchatacterを上書きしており、最後のロケーション0には\0

于 2013-01-08T17:02:43.680 に答える
0

最後に\nを入れてみてください

 printf("First Entry?\n");
 printf("Last Entry?\n");
于 2013-01-08T17:09:42.150 に答える
0

std から読み取ります。前のgetchar入力に改行文字がある場合、問題が発生する可能性があります。置くだけで、

fflush(stdin);

printf("First Entry?");
于 2013-01-08T17:11:08.477 に答える