带条件格式的 Printf

Printf with conditional format

我想打印基于 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);

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

这个表达式

(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 语句。