我正在编写类似这样的代码:
do {
int i = 0;
int j = i * 2;
cout<<j;
i++;
} while (j < 100);
当我的编译器告诉我不能使用变量'j',因为它在do-while循环之外未声明时,我感到惊讶。
我只是好奇是否存在任何技术原因,使这不可能发生。
我正在编写类似这样的代码:
do {
int i = 0;
int j = i * 2;
cout<<j;
i++;
} while (j < 100);
当我的编译器告诉我不能使用变量'j',因为它在do-while循环之外未声明时,我感到惊讶。
我只是好奇是否存在任何技术原因,使这不可能发生。
j
的作用范围仅限于 {}
大括号内。你不能在循环条件中使用它,因为循环条件位于该作用域之外。{}
包围的一组语句。这是不可能实现的原因。这是由于“语句范围”的限制。
你声明的变量i和j具有“局部范围” - 即在{}括号内部的变量。你实际上想要将j声明为“语句范围”,但这是不可能的。
语句范围指那些作为'for'、'while'、'if'或'switch'语句一部分声明的变量。然而,语句范围不包括do-while语句,这就是为什么你不能这样做。
你基本上揭示了使用do-while的语言缺陷。
如果语言提供了以下内容,会更好:
do {
.
.
.
} while (int j < 100);
Double这个词需要改成一个未被保留的单词(感谢Chad),才能在while条件中使用,因此必须在do的范围之外声明。
int i = 0;
int d = 0;
do{
d = i * 2;
cout << d;
i++;
} while (d < 100);
double
的名称。 - Chadint j = 0;
for(int i = 0;j < 100;++i){
j = i * 2;
cout<<j;
}
double
是一个关键字,是的,double
(变量)在循环外部不在作用域内(因此不能用作条件)。 - Chadfor(;;) {cout << 0;}
。 - chrisj
作用域问题),那么是可以的。 - syam