C语言 - while循环体内变量重新声明,陷入死循环。

今天写一个实验代码时,用到了while(exp)循环。发现exp已经为false。但是依然死循环下去。

float T = (float)work[srcNode] / (workAll/6);
	int consume = 0;
	float flag = 1.5;
	while( T > flag ){	
		consume += (work[srcNode] - work[dictNode]) * node[srcNode][dictNode] / 2;
		work[srcNode] = (work[srcNode] + work[dictNode]) / 2;
		work[dictNode] = (work[srcNode] + work[dictNode]) / 2 ;
		compute(work, &srcNode, &dictNode, &workAll);
		float T = (float)work[srcNode] / (workAll / 6);
}

为了排除实验逻辑的影响,更加方便描述问题。我重新写了一个简单的while(exp)代码

int flagWhile1 = 6;
while (flagWhile1 > 1){
	flagWhile1--;
	printf("%d ",flagWhile1);
}

输出的结果为。并且可以成功退出。

5 4 3 2 1

 

那么问题就来了,怎么肥事呢?

我仔细看了两个代码,发现一个由于复制粘贴引起的不同:

while循环体内,计算T的语句是复制的

float T = (float)work[srcNode] / (workAll / 6);

这其实是又声明了一个变量。和while(T>flag)中的T不一样。

 

为了验证我们的想法。再次写一个简单的while(exp)。

int flagWhile2 = 6;
while (flagWhile2 > 1){
		int flagWhile2=0;
		printf("%d ", flagWhile2);
}

执行发现,陷入了死循环中,并且一直输出0。

 

这也就表明了,while循环体中的int flagWhile2其实是重新声明了一个新的变量,并不同于条件判断中的flagWhile2。

也借此告诉大家,少用ctrl+c ctrl+v;同样的语句,会造成不一样的结果,可能和你想想的不一样。

你可能感兴趣的:(C语言 - while循环体内变量重新声明,陷入死循环。)