#53506: 三元運算子就是讚啦


kenny980721.tu@gmail.com (有事直接私)

學校 : 國立中興大學附屬高級中學
編號 : 290039
來源 : [220.134.29.87]
最後登入時間 :
2025-09-13 17:26:11

三元運算子

(判斷式) ? a : b

限制 : 
a 跟 b 必須要是同一型別(int , long long , string ......)

a 跟 b 放置的是值 不能放程式碼

(a > 0) ? cout << a; : cout << -a;這樣是不行的 應該是寫 cout << ((a > 0) ? a : -a);

且三元運算子幾乎可以說是運算子優先順序中最低的 所以建議外面都再加一層括號 以免發生不可預期的錯誤

什麼意思呢 就是如果你寫cout << (a>0) ? a : -a;

程式會覺得你寫的是((cout << (a>0)) ? a : -a);

假設a = 2

  1. 首先先執行cout << (a>0) -> 2>0 輸出 1
  2.  接下來是會進入判斷式 (cout << (a>0)) ? a : -a由於cout是一個有效物件 所以判斷式成立 -> 整行程式碼變成 a;
  3. a;這行程式有有跟沒有一樣(因為你沒有對a做任何動作) 所以你最後看到的就只有cout << (a>0)的1

程式碼:

#include<iostream>
using namespace std;
int main(){
    long long a, b, c;
    while(cin >> a >> b >> c){
        cout << a << " 個餅乾," << b+((a>=10 and c>=2) ? ((a/10 > c/2) ? c/2 : a/10) : 0) << " 盒巧克力," << c << " 個蛋糕。" << '\n';
    }
}

等價於

#include<iostream>
using namespace std;
int main(){
    long long a, b, c;
    while(cin >> a >> b >> c){
if(a>10 and c>=2) {
if(a/10 > c/2) cout << a << " 個餅乾," << b + c/2 << " 盒巧克力," << c << " 個蛋糕。" << '\n';
else cout << a << " 個餅乾," << b + a/10 << " 盒巧克力," << c << " 個蛋糕。" << '\n';
}
else cout << a << " 個餅乾," << b << " 盒巧克力," << c << " 個蛋糕。" << '\n'; } }