我在 c 中使用条件语句。在编码时我发现这段代码不起作用
int x = 1;
printf(1>0? "%d",x : "0");
现在,1 显然大于 0。所以程序应该打印 x 的值。但它实际上从不打印任何东西! 我使用的是 Codeblocks 17.12,我的编译器是 MingW
最佳答案
它正在按规定工作。不幸的是,你在滥用它。您似乎期望条件检查应该产生两个函数调用之一:
printf("%d",x);
printf("0");
这不是 C 的工作方式。您使用条件表达式,因此结果必须是单个值,转换为单个函数参数。您写的逗号不是用于分隔函数参数的逗号。它是逗号运算符,它本身就是一个表达式。
表达式 "%d", x
的语义是对"%d"
求值,丢弃结果,再求值x
。 x
是带逗号运算符的表达式的结果。
这意味着你的函数调用等同于
printf(1 > 0 ? x : "0");
您传递一个整数,其中需要指向字符串的指针。一个体面的编译器至少应该用警告来标记它,如果你的编译器不需要,你需要给它适当的标记来警告你。
关于条件运算符 : ?:在 c 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54667568/