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;同样的语句,会造成不一样的结果,可能和你想想的不一样。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值