0

STDINから文字列を読んでいます

    unsigned char arr[200];
    gets(arr);
  // do something with arr

上記のコードは一度実行されます。

ここで、ユーザーがループを使用して STDIN から複数の文字列を入力できるようにしたいと考えました。また、ユーザーがこれ以上文字列を入力したくない場合に終了するオプションもあります。

お気に入り:

while(CONDITION){
   gets(arr);
   // do something with arr
}

どうすればこのような条件を付けることができますか?

4

4 に答える 4

3

は使用しないでください。gets()危険fgets()です。代わりに使用してください。

fgets()ファイルの終わりが検出された場合、または読み取りエラーが発生した場合は、NULL ポインターを返します。正常に読み取られると、null 以外のポインターが返されます。この戻り値を条件として使用できます。

于 2013-11-10T10:02:19.437 に答える
1

まず、 のfgets代わりに使用しgetsます。次に、リンクされた参照を読むと、fgetsnull 以外のポインターが返されることがわかります。すべて問題ないので、それをループ条件として使用できます。

于 2013-11-10T10:02:54.897 に答える
0

このようになるかもしれません

while(1) {
 gets(arr);
 if(someExitCondition(arr))
  break;
 // do something with arr
}

もちろん、gets の代わりに fgets を使用します

于 2013-11-10T10:03:09.503 に答える
0

あなたは次のようにすることができます、

 while((fgets(arr, sizeof arr, stdin) != NULL))
 {  
     // do something with arr
 }

初めてfgets()を使用するため、その構文は次のとおりです。

char * fgets ( char * str, int num, FILE * stream );
  1. strchar *入力が保存される場所です。

  2. num読み取る最大文字数です

  3. streamFILEfopen から返される構造体へのポインタです。stdin、stdout、および stderr も同様です。

于 2013-11-10T10:10:50.253 に答える