gpt4 book ai didi

c - 基本for循环的误区(C)

转载 作者:太空宇宙 更新时间:2023-11-04 01:51:25 24 4
gpt4 key购买 nike

我一直在通过推荐的 book 进行一些练习。我在这个网站上找到的。我遇到了下面这段我无法完全理解的基本代码。

#include <stdio.h>

int main(void)
{

int i;

for (i = 10; i >= 1; i /= 2)
printf("%d ", i++);

return 0;
}

这是我在这个程序片段背后的推理:

  1. 变量 i 初始化为 10
  2. i 被测试以查看是否大于或等于 1(总是如此)。
  3. 第三个表达式为:i = i/2,因此i除以2并将其值存储在i中
  4. printf 语句中,i 在每个 printf 语句之后递增。

我根本无法理解为什么这个程序的输出是:

1 1 1 1 1 1 1 1 ...

我知道条件语句总是为真,但是第一个值不应该是:

5 3 2 1 1 1 1 1?

基本上我似乎无法理解为什么 i 的值立即被存储为 1。对我的推理和/或对此事的见解的任何更正将不胜感激。请原谅这个问题的基本性质。

最佳答案

正如@abelenky 所指出的,正确的输出是 10 5 3 2 1 1 1 ... .您在推理中犯的唯一错误是声明 i /= 2在再次测试条件之前, for 循环的主体之后被评估。因此,编写相同循环的另一种方法是

for(i = 10; i >= 1; i = (i + 1) / 2)
printf ("%d ", i);

如果您在 Windows 上运行,请尝试通过 more 对输出进行分页: myprog | more .这应该让您看到这个无限循环输出的开始。在 Linux 机器上,您可以使用 more 获得相同的结果。或 less : myprog | less .感谢@EugeneSh 提出这可能是问题所在的建议。

我发现另一种查看此类程序初始输出的方法是在使用 Enter Ctrl+C kbd>。这不是“标准”方法,可能需要非常快速的 react 才能获得像您这样的快速循环的任何结果。

最后一个建议是直接限制程序的输出:

int i, count;
for(i = 10, count = 0; i >= 1 && count < 100; i /= 2, count++)
printf("%d ", i++);

这将添加一个计数器,在打印 100 个数字后停止输出并让您看到第一个数字。

关于c - 基本for循环的误区(C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42280590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com