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

标签 c crash conditional-statements ternary-operator

我在 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"求值,丢弃结果,再求值xx 是带逗号运算符的表达式的结果。

这意味着你的函数调用等同于

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

您传递一个整数,其中需要指向字符串的指针。一个体面的编译器至少应该用警告来标记它,如果你的编译器不需要,你需要给它适当的标记来警告你。

关于条件运算符 : ?:在 c 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54667568/

相关文章:

c++ - 尝试使用宽字符串创建类时出现访问冲突

sql-server - T-SQL - 在 where 和子句中使用参数

c - 在 C 中使用线程时的奇怪行为

c - C 中内存地址的总体结构

android - React Native应用程序在Android上启动时崩溃:找不到类 “com.facebook.react.devsupport.DevSupportManagerImpl”

swift - 实例化包含UIScrollView的Storyboard时,UIKit崩溃

c++ - C++的连续操作

条件变量的误解

使用 mhash 编译程序

c - 如何使用scanf检查用户是否输入了整数