我写的是这样的代码:
do {
int i = 0;
int j = i * 2;
cout<<j;
i++;
} while (j < 100);
当我的编译器告诉我我不能使用变量&#39; j&#39;因为它没有在do-while循环之外声明。
我很好奇是否有任何技术原因导致这种情况无法实现。
答案 0 :(得分:12)
j
的范围恰好在{}
括号内。您不能在循环条件中使用它,这不在该范围内。
从C ++草案标准我很方便:
块中声明的名称是该块的本地名称。它的潜在范围始于其声明点,并在其声明区域结束时结束。
“块”也称为“复合语句”,是用括号{}
括起来的一组语句。
答案 1 :(得分:6)
有一个原因导致这种情况无法实现。这是由于“声明范围”的限制。
您的变量i和j已使用“local scope”声明 - 即{}括号内的变量。你实际上想要用“语句范围”声明j,但这是不可能的。
Statement-scope是声明为'for','while','if'或'switch'语句的一部分的变量。但是,语句范围不包括do-while语句,这就是为什么你不能这样做的原因。
你基本上暴露了使用do-while的语言缺点。
如果提供的语言会更好:
do {
.
.
.
} while (int j < 100);
但它不提供此功能。
答案 2 :(得分:0)
Double,必须更改为非保留字(感谢Chad),需要在do的范围之外声明,以便在while条件下使用。
int i = 0;
int d = 0;
do{
d = i * 2;
cout << d;
i++;
} while (d < 100);
答案 3 :(得分:0)
答案 4 :(得分:-1)
int j = 0;
for(int i = 0;j < 100;++i){
j = i * 2;
cout<<j;
}
在每个循环集之前i = 0;并声明为int + for循环效果更好