循环与分支结构的同级问题
查看原帖
循环与分支结构的同级问题
879496
I_AK_IoI_2030楼主2024/5/6 20:05

奇怪的写法,奇怪的错误

首先是本题在搜索部分的一段代码,出现奇怪的问题。

if(idx==0) for(int i=1;i<=m;i++) if(f[i]>0) qn.push(qnode{i,f[i]});
else{
  	cout<<"haha  "<<idx<<endl;
	for(int i=1;i<m;i++){
		if(f[i]>0){
			qn.push(qnode{i+1,f[i]+w[idx]});
			f[i]=-1;
		}
	}
	qn.push(qnode{1,w[idx]}); 
}
f[m]=-1;
return qn;

显然在idx=0(即根节点)时会进入上面的if,不会进入下面的else(这只是人类的理解方式)。但离奇的事情发生了,程序居然输出了 "haha 0" 。

然后我又写了一份格式差不多的测试代码:

#include<iostream>
using namespace std;
int main(){
	int a=0;
	if(a==0) for(int i=1;i<=10;i++) if(i%2) cout<<"haha  "<<i<<endl;
	else cout<<a<<"  问题在这  "<<i<<endl;
  	else cout<<"huhu"<<endl;
	return 0;
} 

其输出为:

haha  1
0  问题在这  2
haha  3
0  问题在这  4
haha  5
0  问题在这  6
haha  7
0  问题在这  8
haha  9
0  问题在这  10

现在可以发现问题所在了:编译器认为,下方的 else 与最内层判断奇偶的 if 同级,而非人类理解的判断 a 的 if 。

这是因为程序是用栈模拟的嵌套循环,会把右侧同级的所有判断同级运行吗?

有知道的读者可以回复一下,谢谢。

2024/5/6 20:05
加载中...