c - 如何在循环内增加 while 循环的计数器?

标签 c while-loop post-increment postfix-operator

我有一种感觉,我在这里会感到非常愚蠢,但我只是在学习如何使用 ++-- 来递增和递减 while 循环的变量,并且想知道为什么这段代码有效以及为什么它无效' t?

错误代码:

int ctr = 0;
while (ctr < 10)
  printf("%d",ctr);
  ctr=ctr+1;

错误代码无限期地输出零。

工作代码:

int ctr=0;
while (ctr++ < 10)
    printf("%d",ctr);

这个想法是输出为 012345678910,但即使在工作代码中,它也从 1 开始一直到 10,而不是从 0 开始。即使 ctr 的初始值为 0。

最佳答案

第一种情况

while (ctr < 10)
  printf("%d",ctr);
  ctr=ctr+1;

while 循环体被视为printf() 语句。 ctr=ctr+1; 不是循环体的一部分。因此,在循环条件检查中有一个未更改的变量,这使其成为无限循环。

您需要使用 {} 将这两个语句包含在 block 作用域中,以便这两个语句都成为循环体的一部分。类似的东西

while (ctr < 10) {
  printf("%d",ctr);
  ctr=ctr+1;
}

就可以了。


第二种情况

int ctr=0;
while (ctr++ < 10)
    printf("%d",ctr);
while 条件检查表达式中,

ctr 已经作为后缀增量运算符的副作用而递增。因此,在打印该值时,会打印已经递增的值。

关于c - 如何在循环内增加 while 循环的计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41995217/

相关文章:

main() 函数可以返回 double 吗?

ruby - 为什么我的 while 循环卡住了?我忘记了一步吗?

arrays - 减少 'While read' 循环的处理时间

java - 如何在没有break语句的情况下键入BinarySearch方法while循环?

java - 为什么在 for 循环的迭代部分将前增量更改为后增量不会产生影响?

javascript - i++ 与 JavaScript for 循环中的++i

c - 面临编写我自己的和 my_itoa 以及我的 atoi 的挑战,它们应该在 C 中将整数更改为 ascii,反之亦然

c - 对 csv 文件进行两次标记

c - 来自/dev/{random,urandom} 的快速并行随机数生成

C、前后自增,不同程序答案不同