我是靠谱客的博主 感性银耳汤,这篇文章主要介绍C语言 - while循环体内变量重新声明,陷入死循环。,现在分享给大家,希望可以做个参考。

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

复制代码
1
2
3
4
5
6
7
8
9
10
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)代码

复制代码
1
2
3
4
5
int flagWhile1 = 6; while (flagWhile1 > 1){ flagWhile1--; printf("%d ",flagWhile1); }

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

复制代码
1
5 4 3 2 1

 

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

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

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

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

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

 

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

复制代码
1
2
3
4
5
int flagWhile2 = 6; while (flagWhile2 > 1){ int flagWhile2=0; printf("%d ", flagWhile2); }

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

 

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

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

最后

以上就是感性银耳汤最近收集整理的关于C语言 - while循环体内变量重新声明,陷入死循环。的全部内容,更多相关C语言内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部