for(i = 0; i<10 ; ++i)
printf("*");
按照我的逻辑,这个提示应该打印 9 颗星,因为 ++i 是第一个操作,在检查条件之前使 i=1。所以然后从 i = 1 一直到 i = 9,它将打印 *'s 这将是 9 个 *'s。正确的?
for(i = 0; i<10 ; ++i)
printf("*");
按照我的逻辑,这个提示应该打印 9 颗星,因为 ++i 是第一个操作,在检查条件之前使 i=1。所以然后从 i = 1 一直到 i = 9,它将打印 *'s 这将是 9 个 *'s。正确的?
它会打印 10 颗星,因为您从0
到9
.. 计数,即 10 次迭代
第一次迭代将i=0
不1
++i
一旦 for 循环中的内容被执行,就会执行
for循环的步骤:
使用启动条件 ( i=0
) 启动循环并检查终止条件
操作循环内的命令
操作递增/递减条件 ( ++i
) -除非循环内的命令已被执行,否则不会执行此操作
检查终止条件 ( i<9
) - 如果条件不满足则退出循环
再次循环内的动作命令
再次应用递增/递减
重复 4-7
问题:
为什么OP的这个问题被否决了?
对我来说,这个问题对于刚开始编程的人来说似乎非常真实。为什么我们不能更鼓励和乐于助人,而不是让某人提出真正的问题而失去动力?
我知道这个问题对你们大多数人来说可能太微不足道了,但这并不是阻止某人提出此类问题的理由(特别是如果他们是编程新手)
按照我的逻辑,这个提示应该打印 9 颗星,因为 ++i 是第一个操作,
在这里你错了。
for (a; b; c) d
相当于
a;
while (b) {
d;
c;
}
所以c
一开始不执行,但仅在第一次迭代之后执行。
因此,您有 10 次迭代。
如果将其转换为等效于 while 循环,它将是:
i = 0;
while (i<10) {
printf("*");
++i;
}
您正在寻找的是;
i = 0;
while (++i<10) {
printf("*");
}
所以等效的 for 循环将是:
for (i = 0; ++i < 10;) {
printf("*");
}
在逻辑检查步骤增加变量的位置。
Quote: 因为 ++i 是第一个操作,所以在检查条件之前使 i=1
那是你走错了。++i 是循环的最后一个操作。
for 循环像这样开始 for(i=0; i<10;++i)
第一个这里 i=0 被评估然后检查条件 i<10。然后在循环中执行操作,然后 i 将递增,即 ++i。然后它检查条件 i<10;像这样它将持续到 0 到 9 然后停止。
所以第一次 i=0 ++i 或 i++ 无关紧要,因为它将在循环内的执行语句结束时进行评估。
在进入每次迭代之前检查 for 循环条件,并在每次迭代后评估增量部分。在第一次迭代中,i 为 0,并且在 printf 之后递增;不是以前。使用 ++i 或 i++ 无关紧要。