在C中,如何在使用两种不同数据类型的printf语句中使用条件运算符?我希望下面的代码每次遇到偶数时都不打印而不是零。我还希望能够在遇到某些数字时打印一个字符串。
我尝试了类型转换(char)list [i],但是由于printf语句需要整数,因此会导致类型不兼容。
int fail = 0;
int list[] = {1, 2, 3, -1, 4};
int size = sizeof(list) / sizeof(list[0]);
for(int i = 0; i < size; i++) {
if(list[i] == -1) {
break;
}
printf("%d\n", (list[i] % 2 == 0) ? (i) : (fail));
}
答案 0 :(得分:2)
正确和可读的方法是使用多个printf
调用,每个调用都有自己的格式和参数:
if (list[i] % 2 == 0) {
printf("%d\n", i);
}
else if (i == 42) {
puts("The answer");
}
/* Otherwise, print nothing */
您也可以使用?:
运算符执行此操作:
(list[i] % 2 == 0) ? printf("%d\n", i) :
(i = 42) ? printf("%s\n", "The answer") :
0;
(这是有效的,因为所有三个可能的返回值都是打印的字符数。)
如果您只想将0打印为空而不是0
,请使用0作为格式说明符的 precision (而不是宽度):
printf("%.0d\n", i);
(在混淆代码中,您可以使用三元运算符强制将要隐藏的值设置为0。或者甚至使用乘法。)
C是一种强类型语言,这意味着编译器需要能够推导出任何表达式的类型。这包括?:
个表达式,因此该运算符的第二个和第三个参数不可能具有不兼容的类型。