【问题标题】:c++ declaration and initialization variables inside while loopsc++ 在while循环中声明和初始化变量
【发布时间】:2017-07-20 23:19:51
【问题描述】:

在以下代码中:

#include <iostream>

using namespace std;

int main()
{
    int num = 0;

    while (num >= 0 && num <= 3)
    {
        int inner_loop_count = 0;
        cout << "Loop # " << ++inner_loop_count << "\n";
        num++;
    }
}

输出是:

循环 #1
循环 #1
循环 #1
循环#1

我的理解是循环作用域在大括号{}之间,不能用来定义循环计数器,因为每次都会重做声明和初始化。

我尝试了以下解决方案:

  1. 使用静态关键字。 (无论好坏)。
  2. 将 while 本身包含在外部 {} 中,并在 while 之前声明计数器变量。

问题 #1: 我的理解正确吗?
问题 #2: 还有其他的技术上可行的解决方案吗?

谢谢

【问题讨论】:

    标签: c++ loops while-loop initialization declaration


    【解决方案1】:

    你的理解是正确的。另一种可能的解决方案是使用for 循环:

    using namespace std;
    
    int main()
    {
        for(int num = 0, inner_loop_count = 1; num <=3; num++, inner_loop_count++)
        {
            cout << "Loop # " << inner_loop_count << "\n"; 
        }
    
        return 0;
    }
    

    【讨论】:

      【解决方案2】:

      A1。是的,你的理解是正确的。自动变量是其块的本地变量(由{} 分隔),因此如果在循环体中声明,它不能用作循环计数器。

      A2。您的 2. 建议是在 while 循环中使用计数器的典型方法,尽管通常不需要用外部块隔离计数器。另一种可能性:for 循环控制结构,其作用完全相同,但语法不同(即它是语法糖)。

      此外,您可以使用全局变量 - 这与使用局部静态变量非常相似。

      【讨论】:

        【解决方案3】:

        我的理解是循环作用域在大括号{}之间,不能用来定义循环计数器,因为每次都会重做声明和初始化。

        你是对的

        您可以像这样在 while 循环之外声明您的计数器:

        int inner_loop_count = 0;
        while (num >= 0 && num <= 3)
        {
            cout << "Loop # " << ++inner_loop_count << "\n"; //beware..Counts +1 before loop is done. First looping will count as 1, but is actually number 0
            num++;
        }
        

        【讨论】:

          【解决方案4】:

          您实际上无法在循环体内定义循环计数器。正如您所提到的,static 可以在给定的上下文中在技术上工作。但是如果第二次进入循环,计数器就不会从 0 开始。

          因此,请改用for 循环。

          这就是它的“目的”:

          for( int num = 0; num <= 3; ++num )
          {
              // ...
          }
          

          它是由与 while 循环等效定义的,该循环放置在放置 int num = 0 声明的封闭大括号块中。

          更新 ++num 被放置在循环体的底部,如下所示:

          // Equivalent:
          {
              int num = 0;
              while( num <= 3 )
              {
                  // ...
                  ++num;
              }
          }
          

          ...您可以避免使用for 编写。

          【讨论】:

            【解决方案5】:

            您的理解是正确的,另一种可能的解决方案是在循环之外声明变量:

            int inner_loop_count = 0;
            while (num >= 0 && num <= 3)
            {
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2016-06-07
              • 2021-04-14
              • 2011-05-24
              • 2011-12-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多