首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >减少For循环(C) - EX: for(i-;i>0;i--)的初始化

减少For循环(C) - EX: for(i-;i>0;i--)的初始化
EN

Stack Overflow用户
提问于 2021-11-27 21:32:41
回答 2查看 85关注 0票数 0

我在书中读到了关于操作系统设计的文章,书中的第182/183页的第10章中出现了一个for循环语句。for循环从递减for循环的初始化语句开始。我以前从未见过这种情况,所以我创建了自己版本的这个循环来处理它,如下所示:

代码语言:javascript
复制
        #include stdio.h
        main(){
          int i = 100;
          for(i--; i>0; i--){
             printf("%d \r", i);
          }
        }

在使用gcc编译并运行这个小程序时,输出是: 1.这使我相当困惑,因为我希望for循环最终跳过i=99,因为减量操作符是在观察到初始化变量之后运行的。

Xinu中的for循环代码开始了我的提问,它与缓冲池的创建有关,本质上是循环通过内存块(池)将其划分为单独的缓冲区。初始化变量numbufs表示用户希望从池中分割出的缓冲区的数量。池的起始地址由buf提供。下面是供参考的循环:

代码语言:javascript
复制
        for (numbufs-- ; numbufs>0 ; numbufs-- ) {
           bpptr = (struct bpentry *)buf;
           buf += bufsiz;
           bpptr->bpnext = (struct bpentry *)buf;
        }

有人能解释一下这类for循环是如何工作的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-27 21:36:41

在循环的版本中,打印'\r‘字符。这是一个回车字符。结果是printf覆盖了已经写好的字符。请看这个问题:What's the Use of '\r' escape sequence?

票数 1
EN

Stack Overflow用户

发布于 2021-11-27 21:42:48

所写的循环将从99次减少到1次,每次重印。因为循环中没有延迟,所以它的运行速度将超过您所能看到的速度,并且您将在终端上只运行1。在printf之后将一个sleep(1);添加到循环中,您最好看看发生了什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70138871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档