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 回答