【求助】char变量声明和赋值的位置对于程序的影响
  • 板块学术版
  • 楼主QRCODE111
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/2 19:51
  • 上次更新2024/12/2 21:53:56
查看原帖
【求助】char变量声明和赋值的位置对于程序的影响
1159883
QRCODE111楼主2024/12/2 19:51

在做 这题 时发现的

代码(不是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内赋值没有用处),那么一切回归正常

这到底是为什么???

2024/12/2 19:51
加载中...