其他分享
首页 > 其他分享> > c – 无法理解逗号表达式

c – 无法理解逗号表达式

作者:互联网

#include <iostream>
using namespace std;
int main()
{
    int a, b, c, max;
    cout<<"a="; cin>>a;
    cout<<"b="; cin>>b;
    cout<<"c="; cin>>c;
    a>b?(max=a, a=b, b=max):a;
    b>c?(max=b, b=c, c=max):a;
    a>b?(max=a, a=b, b=max):a;
    cout<<a<<"  "<<b<<"  "<<c;
}

这是一个代码,您可以输入3个随机数,它将按顺序排列.但是,我不明白这一部分:

a>b?(max=a, a=b, b=max):a;
b>c?(max=b, b=c, c=max):a;
a>b?(max=a, a=b, b=max):a;

它是如何工作的,为什么?

假设a = 6,b = 54,c = 12.

> a> b?(max = a,a = b,b = max):a; < - 将max设置为6,然后设置为54,然后设置为54 = max.然后比较6到54这是假的并写一个(6)作为第一个数字?
> b> c?(max = b,b = c,c = max):a; < - 将max设置为54,b = 12,12 = max.那么比较54到12这在我们的情况下是正确的并且写c = 12作为第二个数字?
> a> b?(max = a,a = b,b = max):a; < - 将max设置为6,a = 54,54 = max.然后比较6到54这是假的并且再次写入6,wtf?
程序本身正常工作.我只是不明白算法是如何工作的.

解决方法:

这个:

cond ? A : B

大致相当于这个:

if (cond) {
    A;
} else {
    B;
}

这个:

(X, Y, Z)

大致相当于这个:

X;
Y;
Z;

即,依次完全评估每个表达.

使用这两个规则,您应该能够跟踪代码的执行情况.但是,该代码是怪诞的,应该永远不会这样写.所以我的建议是忽略它,并正确编写算法.

标签:comma,c,numbers,operator-keyword
来源: https://codeday.me/bug/20190725/1538514.html