带条件格式的 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 语句。
我想打印基于 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 语句。