条件运算符: :在c中不起作用

时间:2019-02-13 10:12:10

标签: c crash conditional ternary-operator

我在c中使用条件句。在编码时,我发现此代码无法正常工作

int x = 1;
printf(1>0? "%d",x : "0");

现在,1明显大于0。因此程序应打印x的值。但实际上它从不打印任何内容! 我正在使用Codeblocks 17.12,我的编译器是MingW

2 个答案:

答案 0 :(得分:3)

它正在按指定方式工作。不幸的是,您滥用它。您似乎希望条件检查应该产生两个函数调用之一:

printf("%d",x);
printf("0");

这不是C的工作方式。您使用条件表达式,因此结果必须为单个值,该值将转换为单个函数参数。您编写的逗号不是用于将参数分隔为函数的逗号。它是逗号运算符,它本身是一个表达式。

表达式 "%d", x的语义是求值"%d",丢弃结果,然后求值xx是使用逗号运算符的表达式的结果。

这意味着您的函数调用等效于

printf(1 > 0 ? x : "0");

您传递了一个整数,在该整数处期望有指向字符串的指针。一个不错的编译器应该至少用警告来标记它,如果没有,则需要给它适当的标记来警告您。

答案 1 :(得分:2)

您的代码中有错误。

尝试一下:

printf("%d", 1 > 0 ? x : 0);

我邀请您检查printf documentation和一些ternary operator examples,以更好地了解您的代码出了什么问题。