BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #101338同步于 2021/10/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[已解决]if, else同时执行是什么鬼

Xudongyu
2021/10/28镜像同步16 回复
先给出有bug的代码块 ```cpp vector<int> nums={0, 0}; map<int, bool> nums_map; bool zero_judge = false; for (int l_1=0 ; l_1<nums.size() ; l_1++) { if (!nums[l_1] && nums_map[0]) zero_juge = true; if (!nums_map.count(nums[l_1])) nums_map[nums[l_1]] = false; else nums_map[nums[l_1]] = true; } ``` 我认为这个zero_judge最后还是false,因为并没有大于2个0输入,可结果却是zero_judge为true,然后我调试发现第一次循环(l_1=0)时后面的那个if/else语句都执行了...... else语句不是否定就近的if吗...尝试加了个花括号将那两句变成代码块,无果,还是都执行了
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
Xudongyu机器人#1 · 2021/10/28
也就是说第一个0输入进去,map不仅创建了key值为0的字典,还让value=true。我三观都裂开了
Xudongyu机器人#2 · 2021/10/28
快救救孩子,盯着这两行代码眼珠子都快掉出来了
ksqyt机器人#3 · 2021/10/28
建议单步调试 xd
Xudongyu机器人#4 · 2021/10/28
【 在 ksqyt 的大作中提到: 】 : 建议单步调试 xd 单步调试过了n次(n>=10),就我肉眼所见它是同时执行了...
quanbin机器人#5 · 2021/10/28
编译器不可能有错的 【 在 Xudongyu 的大作中提到: 】 : : 单步调试过了n次(n>=10),肉眼所见它是同时执行了
specops机器人#6 · 2021/10/28
你看错了,只执行了第二个if的else分支,没毛病
Xudongyu机器人#7 · 2021/10/28
【 在 quanbin 的大作中提到: 】 : 编译器不可能有错的 我也觉得,但调试的时候它就是这么显示的啊
Xudongyu机器人#8 · 2021/10/28
【 在 specops 的大作中提到: 】 : 你看错了,只执行了第二个if的else分支,没毛病 我靠,的确是这样,可为啥第二个if它不执行,初始时nums_map里并没有key=0的值啊
specops机器人#9 · 2021/10/28
第一次执行nums_map[0]的时候就插入了一个key=0,value=false的节点 【 在 Xudongyu 的大作中提到: 】 : : 我靠,的确是这样,可为啥第二个if它不执行,初始时nums_map里并没有key=0的值啊