【问题标题】:Understanding Simple For Loop Code in C [closed]了解 C 中的简单 For 循环代码 [关闭]
【发布时间】:2016-11-01 03:46:54
【问题描述】:

我是 C 编程的初学者(刚开始),我需要你的帮助来理解这个非常简单的代码的输出:

int main()
{
   int x=1;
   for (;x<=10;x++);
   printf("%d\n",x);
    return 0;
}

输出是: 11

如果 x 值为

计算机是如何理解这段代码的?

【问题讨论】:

  • "计算机是如何理解这段代码的?" - 他可能读过一本 C 的书……不如仿照它的例子?
  • 我的 2 美分...这很少是使用循环的方式。 for 循环除了增加 x 之外什么都不做,因为它是尾随分号 ;。通常你想将循环体包装在{...} 中,并根据循环控制变量(在本例中为x)在循环体中实际做一些事情。这个循环实际上所做的就是插入一个(非常小的)时间延迟。事实上,编译器优化可能会完全省略循环并将x 设置为 11。
  • @MichaelAlbers 这怎么是重复的?您链接的问题是关于理解混淆代码。虽然这个问题是关于询问完全基本的事情是如何运作的。

标签: c for-loop


【解决方案1】:

所以,

int main()
{
   int x=1;           // line 1
   for (;x<=10;x++);  // line 2
   printf("%d\n",x);  // line 3
   return 0;          // line 4
}

第 1 行将 x 初始化为 1。

第 2 行不断将 x 增加 1 直到达到 11。第一个分号表示“在开始循环之前不做任何事情”,x&lt;=10 表示继续直到 x > 10(所以当 x = 11 时)和 x++表示每次将 x 增加 1。如果 x >= 11,则基本上会跳过这一行,因为 x 已经大于 10。

第 3 行将 x 打印到命令行(在这种情况下,如果 x 开始于小于 11,则 x = 11,或者如果 x 开始于 >= 11,则由于前一行,x = 11)

第4行表示程序成功,退出程序。

【讨论】:

  • 认为你也应该解释第 3 行的分号
  • x = 1;在什么情况下使x的起始值大于11?
  • 它从来没有,但是他问为什么当 x 被初始化 >= 11 时行为改变了
【解决方案2】:

对于是这样的:

for(*init-expr*; *test-expr*; *update-expr*) *body-statement* 或者更确切地说,通常可以这样描述:

*init-expr*; while(*test-expr*){ *body-statement* *update-expr*; } 而且,您的 for 语句后跟一个分号,其中 body-statement 是。所以,它是一个“空语句”,只需循环并更新 x,当循环结束时,只打印循环后的x,所以输出为11。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    相关资源
    最近更新 更多