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
我的理解是在循环范围之间是大括号{},不能用于定义循环计数器,因为每次都会重新声明声明和初始化。
我尝试以下解决方案:
- 使用static关键字。 (不管善良还是坏话)。
- 在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;
}