我在c中使用条件句。在编码时,我发现此代码无法正常工作
int x = 1;
printf(1>0? "%d",x : "0");
现在,1明显大于0。因此程序应打印x的值。但实际上它从不打印任何内容! 我正在使用Codeblocks 17.12,我的编译器是MingW
答案 0 :(得分:3)
它正在按指定方式工作。不幸的是,您滥用它。您似乎希望条件检查应该产生两个函数调用之一:
printf("%d",x);
printf("0");
这不是C的工作方式。您使用条件表达式,因此结果必须为单个值,该值将转换为单个函数参数。您编写的逗号不是用于将参数分隔为函数的逗号。它是逗号运算符,它本身是一个表达式。
表达式 "%d", x
的语义是求值"%d"
,丢弃结果,然后求值x
。 x
是使用逗号运算符的表达式的结果。
这意味着您的函数调用等效于
printf(1 > 0 ? x : "0");
您传递了一个整数,在该整数处期望有指向字符串的指针。一个不错的编译器应该至少用警告来标记它,如果没有,则需要给它适当的标记来警告您。
答案 1 :(得分:2)
您的代码中有错误。
尝试一下:
printf("%d", 1 > 0 ? x : 0);
我邀请您检查printf documentation和一些ternary operator examples,以更好地了解您的代码出了什么问题。