三元運算子
(判斷式) ? 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
cout << (a>0)
-> 2>0
輸出 1(cout << (a>0)) ? a : -a
由於cout是一個有效物件 所以判斷式成立 -> 整行程式碼變成 a;
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'; } }