今天写一个实验代码时,用到了while(exp)循环。发现exp已经为false。但是依然死循环下去。
复制代码
1
2
3
4
5
6
7
8
9
10float 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)代码
复制代码
1
2
3
4
5int flagWhile1 = 6; while (flagWhile1 > 1){ flagWhile1--; printf("%d ",flagWhile1); }
输出的结果为。并且可以成功退出。
复制代码
15 4 3 2 1
那么问题就来了,怎么肥事呢?
我仔细看了两个代码,发现一个由于复制粘贴引起的不同:
while循环体内,计算T的语句是复制的
float T = (float)work[srcNode] / (workAll / 6);
这其实是又声明了一个变量。和while(T>flag)中的T不一样。
为了验证我们的想法。再次写一个简单的while(exp)。
复制代码
1
2
3
4
5int flagWhile2 = 6; while (flagWhile2 > 1){ int flagWhile2=0; printf("%d ", flagWhile2); }
执行发现,陷入了死循环中,并且一直输出0。
这也就表明了,while循环体中的int flagWhile2其实是重新声明了一个新的变量,并不同于条件判断中的flagWhile2。
也借此告诉大家,少用ctrl+c ctrl+v;同样的语句,会造成不一样的结果,可能和你想想的不一样。
最后
以上就是感性银耳汤最近收集整理的关于C语言 - while循环体内变量重新声明,陷入死循环。的全部内容,更多相关C语言内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复