c语言do while 循环

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页)


https://baijiahao.baidu.com/s?id=1709264231108040368&wfr=spider&for=pc

#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; 
} 

img

空语句也可以吧,即打一个分号 ; 作为do内的空语句

输出结果是1,当while里面的条件为0时就相当于false,跳出循环,为1时就相当于true,继续循环

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^