起因
今天写洛谷的题,第一道就让我摸不着头脑;网址:P5709 【深基2.习6】Apples Prologue / 苹果和虫子 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
很简单的选择结构的题当判断输出结果是否大于零时我选择使用
cout<<re>0?re:0;
但是这样在洛谷里根本无法通过编译(当然,在dev里可以)
原因
然后我开始搜索原因,这篇CSDN给了我提醒:C++中“ ? : ”三目运算符的坑_此杭非彼航的博客-CSDN博客
ta提到了运算符优先级的问题启发了我。于是我接下来的改变是:
cout<<(re>0)?re:0;
然后还是有一个测试点过不去 。然后我就开始考虑这段代码到底哪里出了问题。
解决
最后,我又给代码加了个括号:
cout<<((re>0)?re:0);
这样就通过了所有测试点,但是究其原因我继续搜索然后看到了这篇CSDN:C++中“cout << ”和“ ? : ”三目运算符的坑_三目运算符输出结果是对错-CSDN博客
<<
运算符的优先级高于条件运算符? :
,所以如果没有括号的话,只有re>0的真假被输出。所以要带上括号,使三目运算符?:被优先计算。