【问题标题】:C++ for loop syntaxC++ for 循环语法
【发布时间】:2016-04-18 15:52:59
【问题描述】:

我是 C 新手,不了解这种类型的 for 循环语法。

for(int i(9), j(0); i > j; i--, j++)
cout << i;

这给出了 98765 的结果,但是为什么呢?

我习惯了这样的循环:

for(int i = 9, int j = 0; i>j; i--, j++){
 System.out.println(i);
}

我看到 i 被初始化为 9 和 j 被初始化为 0,但是它是如何得到这么大的数字的呢?

【问题讨论】:

  • 听起来你可能需要学习如何使用调试器来单步调试你的代码。使用好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏差在哪里。如果您要进行任何编程,这是必不可少的工具。延伸阅读:How to debug small programs
  • cout &lt;&lt; i &lt;&lt; endl; 将产生与 Java 源代码相同的输出
  • 你到底对什么感到困惑?整数初始化,逗号运算符的使用,或者为什么你的输出没有刷新到终端?

标签: c++ for-loop


【解决方案1】:

它按预期打印 9,8,7,6,5,没有任何逗号。这不是一个大数字。

System.out.println() - 在末尾打印一个新行。

cout - 行为方式与System.out.print() 类似,在末尾不打印换行符。

【讨论】:

  • 也许你可以提到cout &lt;&lt;不像System.out.println不添加\n字符;)
  • \n 是错误的。 endl 是对的... stackoverflow.com/questions/7324843/…
  • 我同意,但我想你会发现我从未说过应该包括 \n。相反,我只说cout 不包括它,这是正确的;)
  • @Centril 我不同意。 std::endl 应该仅在您需要 刷新流时使用。你不应该一直使用它。
  • @TartanLlama 嗯......这部分是正确的 - 因为 \n 在需要的地方转换为 CRLF stackoverflow.com/questions/7372012/… 但应该解释一下差异,你至少应该在最后刷新流。
【解决方案2】:

因为您没有打印换行符:

for(int i(9), j(0); i > j; i--, j++)
    cout << i << '\n';

【讨论】:

    【解决方案3】:

    我只想在此处已发布的(好的)答案中添加一些内容:

    int i(9);

    做同样的事情

    int i = 9;

    称为直接初始化。看一看:Constructor of type int

    我认为这首先让你感到困惑。

    【讨论】:

      【解决方案4】:

      缩进在 C++ 中无关紧要,因为空格被忽略...

      因此,

      for(int i(9), j(0); i > j; i--, j++)
      cout << i;
      

      等同于:

      for(int i(9), j(0); i > j; i--, j++)
          cout << i;
      

      这是:

      for(int i(9), j(0); i > j; i--, j++) {
          cout << i;
      }
      

      所以它不是一个数字,而是很多。

      这在 Java 和大多数 C 系列语言中是相同的。

      与 System.out(一个 PrintStream)中的 println 不同... &lt;&lt; 只写你传递给cout 的内容,通常是STDOUT。 要正确地将换行符写入cout,您应该使用:

      cout &lt;&lt; i &lt;&lt; endl;

      请参阅Why use endl when I can use a newline character? 了解更多信息。

      【讨论】:

      • 我认为这不是 OP 感到困惑的地方
      • @MrHug 好吧 - 他的问题并不明确,所以这也可能是他所问的......问题的标题是“C++ for loop syntax”而不是:“C++: How do我打印一个换行符?”而endl 是最正确的方法......不是\n。答案应该牢记每个人,而不仅仅是 OP……那些反对票太不公平了。
      • 你是对的,但是我建议在一篇文章中解决多个问题,而不是一个最不可能的问题(因为他的困惑是关于“大量”而不是它编译的事实)跨度>
      • 好吧;我编辑的答案对这两个问题都有注释……你的没有。这让我不想在 SO 中回答问题......因为你对提问者碰巧问的问题的假设碰巧更正确,即使问题的名称与换行无关一切都与 C++ 循环有关..
      • 我实际上没有这个问题的答案,只是在这里闲逛;)我也删除了我的反对票,但我也不愿意给你一个赞成票。正如您链接的帖子所示,您通常不想使用endl,请参阅accepted answer
      【解决方案5】:

      它没有打印一个大数字,它只是在每个迭代/循环中一个接一个地打印i。看看用这个

      cout << i << endl;
      

      或为ij 尝试不同的号码

      【讨论】:

        【解决方案6】:

        这不是一个大数字。实际上,输出是 5 个不同的数字(9、8、7、6、5)。 您只需通过以下方法将它们打印在不同的行中:

        cout<<i<<endl;
        

        cout<<i<<"\n";
        

        printf("%d\n",i);
        

        还有一件事: int i(9) 简单地将值 9 分配给 i。与 int i=9 相同。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-17
          • 1970-01-01
          • 2018-02-23
          • 1970-01-01
          相关资源
          最近更新 更多