关于C语言中while语句使用过程中出现的一个小问题
关于C语言中while语句使用过程中出现的一个小问题
最近,在调试stm32时使用嵌套while语句的Delay延时语句发现出现死循环。特记录一下。
出现死循环的函数
int main(){ int c = 3; int i,j; while (c--) { i = 3; j = 3; do { while (j--){ printf("j ");//结果发现函数在此处一直循环打印 } } while (i--); printf("dddddddddddd "); } return 0; }
函数分析
int main(){ int c = 3; int i,j; while (c--) { i = 3; j = 3; do { //最主要的问题是出现在while(j--),在判断的时候还对j进行了一次修改 //假设此时j已经等于0,此时不会进入这个while循环语句中,但是会对它做一个减法,那么在下一次进入这个 //判断语句时,j已经为负数。 //根据C语言真假的判断,除0之外的数值均为真,所以此时为真 //然后在while(j--)中一直循环执行 //j会从-1到能表示的最小负值再到能表示的最大正值在减到0时判断为假,退出这个循环 //所以这就造成了在此处一直循环的假象。 while (j--){ printf("j "); } } while (i--); printf("dddddddddddd "); } return 0; }
总结
int main(){ int c = 3; int i,j; while (c--) { i = 3; j = 3; do { while (j--){ printf("j "); } //判断为0,且j为-1后重新赋值为3即可 j = 3; } while (i--); printf("dddddddddddd "); } return 0; }