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