使用fprintf管道分离输出...优化方式

时间:2012-12-19 08:58:47

标签: c

我必须修改现有代码,其中有很多像这样的fprintf语句

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

但是现在如果用户在主参数中传递了“T”,那么我将用分隔符“|”打印输出的红外线

我的文件中有几个fprint。

目前,如果用户想要管道分离输出,我已经采用了一个设置为true的标志。

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

请建议我是否有其他更好的方法来实现这一目标。请注意,我的文件中有几个fprintf。

谢谢!!!

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分: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