C++,而内部声明和初始化变量循环

问题描述:

在以下代码:C++,而内部声明和初始化变量循环

#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. 使用static关键字。 (不管善良还是坏话)。
  2. 在while {}之前包含while本身,并在那里声明计数器变量。

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

感谢

你实际上不能定义循环体内循环计数器。正如你所提到的,一个static可以在特定的环境下在技术上工作。但是,如果第二次输入循环,则计数器将不会从0开始。

因此,请使用for循环。

这就是它的“为”:

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

它是由等效与while环放置在花括号定义的块,其中int num = 0声明放置。

更新++num被放置在循环体的底部在该等效,像这样:

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

&hellip;您可以通过使用for避免写入。

你的理解是正确的,另一种可能的解决办法是宣布一个循环的变量外:

int inner_loop_count = 0; 
while (num >= 0 && num <= 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++; 
} 

A1。是的,你的理解是现货。一个自动变量是其块的局部变量(由{}定界),因此如果在循环体内声明,它不能用作循环计数器。

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

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

你的理解是正确的。另一种可能的解决方案是使用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; 
}