在做 这题 时发现的
代码(不是AC代码)如下
#include <iostream>
using namespace std;
struct Node{
char ls='*',rs='*';
}tree[(const int)('z'+5)];
void out(char root){
if(root=='*')return;
cout<<root;
out(tree[root].ls);
out(tree[root].rs);
}
//以下
int n;
char a[3];
int main(){
// freopen("in.txt","r",stdin);
cin>>n;
char rt;
//以上
for(int i=1;i<=n;i++){
cin>>a;
if(i==1){
rt=a[0];
}
tree[a[0]].ls=a[1];
tree[a[0]].rs=a[2];
}
// for(char i='a';i<='z';i++){
// cout<<i<<' '<<tree[i].ls<<' '<<tree[i].rs<<endl;
// }
out(rt);
return 0;
}
对于样例地,代码中我标记“以下”“以上”的几行,如果我写成如上的样子,能够给出正确结果;如果写成这样:
char a[3],rt;
int n;
int main(){
// freopen("in.txt","r",stdin);
cin>>n;
rt最终没有任何值(如果在后面给rt赋值的for循环中输出rt还是有值的,过了那一次for循环就没了,所以我觉得可能是作用域的问题)
而如果我写成这样:
char rt,a[3];
int n;
int main(){
// freopen("in.txt","r",stdin);
cin>>n;
情况变得更加玄学,无论n为多少(如果输出n值发现是正确的),下面的for循环只会执行一次(没有RE)
而当我把rt单独声明或者在这两种声明的同时为rt赋值(在main内赋值没有用处),那么一切回归正常
这到底是为什么???