printf语句中关于条件运算符的一个疑问

时间:2022-09-08 11:13:21
为了复习条件运算符的用法,我声明了两个变量,仅当x位于1—20之间时,才将x的值赋给y,我写的代码如下:
   int x,y=1;
    x=15;
    printf("如果y=1,则说明x不在1-20之间,否则x的值应该是位于1-20之间的,x=%d,y=%d",(y=(x>=1&&x<=20)?x:y),y);
如果条件运算符表达式做为第一个参数的话,那么出现的结果为:x=15,y=1。即没有把x的值赋给y,但如果把y做为第一个参数的话,运算结果就变成了x=15,y=15。只是改变了一下位置,为什么y的值便成了15呢?有些不解,请各位朋友指教。
   

12 个解决方案

#1


y=(x>=1&&x<=20)?x:y
等价于
if(x>=1 && x <=20 )
{
y = x;
}
else
y = y;

#2


好比printf("%d%d",y,++y);这样的问题了。实在没意思。

#3


y=(,你的这个=号,可是赋值啊,好好想想

#4


哪个前哪个后,怎么都一样

#5


这问题真是老有人问,函数参数列表的计算顺序是C语言标准未定义的行为,你的输出结果只表示你用的编译器是那样实现的

#6


printf("如果y=1,则说明x不在1-20之间,否则x的值应该是位于1-20之间的,x=%d,y=%d",(x>=1&&x<=20)?x:y),y);

#7


取决于编译器

#8


顺便问下为啥偶图片发不上来啊?- -

#9


跟编译器有关,不同编译器是不一样的……

#10


引用楼主 wsfzk 的回复:
为了复习条件运算符的用法,我声明了两个变量,仅当x位于1—20之间时,才将x的值赋给y,我写的代码如下:
   int x,y=1;
    x=15;
    printf("如果y=1,则说明x不在1-20之间,否则x的值应该是位于1-20之间的,x=%d,y=%d",(y=(x>=1&amp;&amp;x<=20)?x:y),y);
如果条件运算符表达式做为第一个参数的话,那么出现的……


没意思,还是好好的写代码。

弄不清优先级就加括号,一条语句不好理解就拆开写,有副作用表达式不要用。

#11


直接赋值给y了啊

#12


呵呵,我只是感到好奇,为什么换了一下顺序,就把前面的y也给影响了呢。我用的是CB,菜鸟一名,大家莫怪。

#1


y=(x>=1&&x<=20)?x:y
等价于
if(x>=1 && x <=20 )
{
y = x;
}
else
y = y;

#2


好比printf("%d%d",y,++y);这样的问题了。实在没意思。

#3


y=(,你的这个=号,可是赋值啊,好好想想

#4


哪个前哪个后,怎么都一样

#5


这问题真是老有人问,函数参数列表的计算顺序是C语言标准未定义的行为,你的输出结果只表示你用的编译器是那样实现的

#6


printf("如果y=1,则说明x不在1-20之间,否则x的值应该是位于1-20之间的,x=%d,y=%d",(x>=1&&x<=20)?x:y),y);

#7


取决于编译器

#8


顺便问下为啥偶图片发不上来啊?- -

#9


跟编译器有关,不同编译器是不一样的……

#10


引用楼主 wsfzk 的回复:
为了复习条件运算符的用法,我声明了两个变量,仅当x位于1—20之间时,才将x的值赋给y,我写的代码如下:
   int x,y=1;
    x=15;
    printf("如果y=1,则说明x不在1-20之间,否则x的值应该是位于1-20之间的,x=%d,y=%d",(y=(x>=1&amp;&amp;x<=20)?x:y),y);
如果条件运算符表达式做为第一个参数的话,那么出现的……


没意思,还是好好的写代码。

弄不清优先级就加括号,一条语句不好理解就拆开写,有副作用表达式不要用。

#11


直接赋值给y了啊

#12


呵呵,我只是感到好奇,为什么换了一下顺序,就把前面的y也给影响了呢。我用的是CB,菜鸟一名,大家莫怪。