条件运算符:? :不在c工作

问题描述 投票:0回答:2

我正在使用c中的条件。编码时我发现这段代码不起作用

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

现在,1显然大于0.所以程序应该打印x的值。但它实际上从未打印任何东西!我正在使用Codeblocks 17.12,我的编译器是MingW

c crash conditional ternary-operator
2个回答
3
投票

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

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

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

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

这意味着你的函数调用相当于

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

传递一个整数,其中指向一个字符串的指针。一个不错的编译器应该至少用一个警告来标记,如果你没有,你需要给它正确的标志来警告你这个。


2
投票

您的代码中存在错误。

试试这个:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.