0

私のアプリケーションでは、次のようなことを達成しようとしています。

私は持っています:

  • データ0、データ1、データ2、...データn。
  • 渡すいくつかのパラメータ

フロー:

  1. いくつかのパラメータを使用してプログラムを開始し、データ0をstdinに書き込みます
  2. プログラムは渡されたデータ「データ0」とパラメータに従って計算を行います
  3. 新しいstdinを「待機」し、(古いstdin、バッファ、変数をクリアしますか?)
  4. データ1、データ2 ...などを入力するときに1〜2を繰り返します
  5. データnに達したら、終了します(または、プログラムに終了するように指示する中止コードをstdinに入力した場合)。

多分このようなものですか?(擬似コード):

int main(int argc, char *argv[])
{
get parameters();
int fslen = data size
char *c = (char *)malloc(fslen);
fgets(c, fslen, stdin);

while((c != null) || (c != Terminate code?))
{       
    do calculations with int c;
    clear c;
}
return 0;
}

または彼らのより良いアプローチですか?

それとも、このように物事を行うのは悪い習慣ですか?もしそうなら、説明してください

4

1 に答える 1

1

少なくとも私が知る限り、行入力を読み取って解析するよりも、行入力を読み取って解析する方が良い方法はありません。

デフォルトでは、stdinはブロックされているはずなので、「待機中」の基準は自動的に処理される必要があります。

ただし、行を読み取ってからコードの行を解析する場合は、2つのループが必要になります。

int main(int argc, char *argv[])
{
    /* initial parameter/buffer setup goes here */

    while (fgets(buffer, bufferlen, stdin)) {
        for (c = buffer; *c != '\0' && *c != terminatingcode; c++) {
            /* calculations go here! ... they sure do! </homer> */
        }
        if (*c == terminatingcode || ferror(stdin))
           break;
    }
}

fgets()は完全に無害な理由でここで「失敗」する可能性があることに注意してください。インターフェイスを正しく使用していることを確認するには、feof()とferror()に精通する必要があります。上記のコードでの私の使用が、コードで実行したい/必要なことと一致しているかどうかはわかりません。

于 2012-02-06T09:26:04.553 に答える