Em cho k < n.
Mà sao output của em lại như này ạ.
int main () {
IOS;
int n = 9;
int k = 3;
int c = 0;
k < n? c = 3, n = 8, k = 5:c = 99932,n = 99999, k = 23442;
debug3(c,n,k);
return 0;
}
}
Em cho k < n.
Mà sao output của em lại như này ạ.
int main () {
IOS;
int n = 9;
int k = 3;
int c = 0;
k < n? c = 3, n = 8, k = 5:c = 99932,n = 99999, k = 23442;
debug3(c,n,k);
return 0;
}
}
Bởi vậy mà nhiều khi người ta dùng cặp ngoặc đơn đấy bạn.
k < n? (c = 3, n = 8, k = 5):(c = 99932,n = 99999, k = 23442); // 1
k < n? (c = 3, n = 8, k = 5):(c = 99932),n = 99999, k = 23442; // 2
Bạn nghĩ 1 và 2 khác nhau không?
Comma operator ,
là thấp nhất nên tính sau. Vì vậy n
, k
sẽ bị gán lại.
Theo như mấy anh chỉ thì cái ở trên là nó được các giá trị c,n,k sẽ biến đổi như lệnh if else luôn còn cái ở dưới là n,k lại bị gán lại do dấu phẩy thuộc cấp thấp như anh rogp10 nói, nhưng mà em còn chưa hiểu cấp thấp là như nào lắm
Để cho dễ hình dung: Do nhân chia ưu tiên hơn cộng trừ nên bỏ ngoặc đơn như sau:
2+(3*5)+7
và
(4*6)+(8*3)
Trở lại vd ban đầu, do toán tử ,
là thấp nhất, nên sau khi bỏ ngoặc đầy đủ sẽ trở thành:
(k < n? ((c = 3), (n = 8), (k = 5)):(c = 99932)), (n = 99999), (k = 23442);