如何使用条件运算符打印整数或字符串值
How can I use the conditional operator to print an integer or a string value
在 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));
}
正确且可读的方法是多次调用 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;
(之所以有效,是因为所有三个可能的 return 值都是打印的字符数。)
如果您只想打印 0 而不是 0
,请使用 0 作为格式说明符的 精度(不是宽度):
printf("%.0d\n", i);
(在混淆代码中,您可以使用三元运算符强制将要隐藏的值设为 0。甚至使用乘法。)
C 是一种强类型语言,这意味着编译器需要能够推断出任何表达式的类型。这包括 ?:
表达式,因此该运算符的第二个和第三个参数不可能具有不兼容的类型。
在 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));
}
正确且可读的方法是多次调用 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;
(之所以有效,是因为所有三个可能的 return 值都是打印的字符数。)
如果您只想打印 0 而不是 0
,请使用 0 作为格式说明符的 精度(不是宽度):
printf("%.0d\n", i);
(在混淆代码中,您可以使用三元运算符强制将要隐藏的值设为 0。甚至使用乘法。)
C 是一种强类型语言,这意味着编译器需要能够推断出任何表达式的类型。这包括 ?:
表达式,因此该运算符的第二个和第三个参数不可能具有不兼容的类型。