0

このような多くの fprintf ステートメントがある既存のコードを変更する必要があります

       fprintf (stdout, "%-30.30s",reason);

しかし、ユーザーがメイン引数に「T」を渡した場合、区切り文字「|」で区切られた出力を出力します

私のファイルにはいくつかの fprint があります。

現在、ユーザーがパイプ区切りの出力を必要とする場合に true に設定するフラグを使用しています。

    if(flag)
          fprintf (stdout, "%-30.30s|",reason);
    else
          fprintf (stdout, "%-30.30s",reason);

これを達成するための他のより良いアプローチがあれば、私に提案してください。私のファイルにはいくつかの fprintf が散らばっていることに注意してください。

ありがとう !!!

4

2 に答える 2

4
char *separator = flag ? "|" : "";

fprintf(stdout, "%-30.30s%s", reason, separator);
于 2012-12-19T09:03:13.927 に答える
1

ワンライナー:

fprintf (stdout, "%-30.30s%c",reason,(flag?'|':'\0'));

コード内に複数の fprintf がある場合は、一連の引数に基づいて出力するマクロまたはインライン関数を単純に記述できます。ラッパー関数を作成し、有効な引数を指定してそのラッパー関数を呼び出します。プログラムの仕様(質問からは明らかではありません)に応じて、ラッパー関数を作成する最良の方法を見つける必要があります。

例:

すべての fprintf スタッフをこのようなラッパー関数に入れ、フラグとケース番号のみで呼び出します。

//Illustrative purposes only
void wrapper(int flag, int caseno,char* reason)
{
if(reason!=NULL)
switch(caseno)
{
case 1:
   fprintf(stdout,"xyz%s",reason);
   break;
case 2:
   fprintf(stdout,"abc%s",reason);
   break;
...
}

fprintf (stdout, "%c",(flag?'|':'\0'));

return;
}

o/p にエラーを書き込んでいるので、stderrの代わりに を使用することをお勧めしstdoutます。

于 2012-12-19T09:22:33.667 に答える