c在while循环中声明和初始化变量

新手上路,请多包涵

在以下代码中:

 #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 之前声明计数器变量。

问题一: 我的理解正确吗?

问题 #2: 是否有其他技术上可行的解决方案?

谢谢

原文由 Shadi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

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

因此,改为使用 for 循环。

这就是它的“目的”:

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

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

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

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

…您避免使用 for 来编写。

原文由 Cheers and hth. - Alf 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

原文由 Ilya Kobelevskiy 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题