do while 循环没有循环体怎么办
int i =-1
do{}
while (i++);
Printf ("i =%d",i);
下面是我的理解,供参考:
do while 循环没有循环体应该是没有问题的,关键在于while循环的条件i++这个表达式的理解,do-while循环的结束条件是当i=0时,如果i不等于0,则一直执行空循环,具体分析如下:
i为int类型,其值如果是-1,do-while循环,循环体do部分先执行一次空循环,while判断i的值,i=-1 , 可以继续执行空循环,判断完后i的值加1变为0;
第二次,循环体do部分执行一次,while部分判断i的值为0,条件不满足,判断完i的值加1为1,最后退出循环打印i的值为1;
当i的值为1时,同样循环体do部分先执行一次空循环,while判断i的值,i=1 , 可以继续执行空循环,判断完后i的值加1变为2;
第二次,循环体do部分执行一次,while部分判断i的值为2,条件满足,判断完i的值加1为3;
如此不断循环,直到i的值变为32位int类型最大值2147483647,执行i++后,发生溢出变为-2147483648, 但while条件仍然满足,继续执行空循环,然后while部分判断i的值,然后i的值继续+1;
继续循环,直到i变为0, while部分判断i的值为0,不再继续循环,接着i的值+1变为1,最后打印i的值就变为1了。
参考资料:
计算机科学概论(第12版)- 第1章 数据存储 - 1.6 整数存储 - 1.6.1 二进制补码记数法 (第33页)
#include <stdio.h>
int main(void){
int i =-1;
do{}
while (i++); //https://blog.csdn.net/qq_43851311/article/details/127967231?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-127967231-blog-89969504.pc_relevant_recovery_v2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-127967231-blog-89969504.pc_relevant_recovery_v2
// https://baijiahao.baidu.com/s?id=1709264231108040368&wfr=spider&for=pc
printf ("i =%d",i);
return 0;
}
空语句也可以吧,即打一个分号 ; 作为do内的空语句
输出结果是1,当while里面的条件为0时就相当于false,跳出循环,为1时就相当于true,继续循环
不知道你这个问题是否已经解决, 如果还没有解决的话: