带条件格式的Printf

问题描述

我想根据mode值打印变量数量。这是示例:

char format[64] = {}
int mode_1,mode_2,mode_3;
int a,b,c,d,e,f;

...
// Get mode value here ....
...

// Build the format first
sprintf(format,"%s-%s-%s\n",mode_1 == 0 ? "a=%d,b=%d" : "a=%d",mode_2 == 0 ? "c=%d,d=%d" : "c=%d",mode_3 == 0 ? "e=%d,f=%d" : "e=%d");

// Print value here
printf(format,mode_1 == 0 ? (a,b) : a,mode_2 == 0 ? (c,d) : c,mode_3 == 0 ? (e,f) : f);

当我尝试一个简单的示例时,在模式值为零时打印的值似乎不正确。我在这里做什么错了?

enter image description here

解决方法

此表达式

(a,b)

是带有逗号运算符的表达式。表达式的结果是最后一个操作数的值。

这就是电话

printf(format,mode == 0 ? (a,b): a);

实际上等同于通话

printf(format,mode == 0 ? b: a);

相反,您可以写

mode == 0 ? printf(format,a,b ) : printf( format,a );

如果printf的调用形式取决于整数变量mode,则可以使用例如switch语句或if-else语句。