Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在条件中使用do while循环中声明的变量_C++_Do While - Fatal编程技术网

C++ 在条件中使用do while循环中声明的变量

C++ 在条件中使用do while循环中声明的变量,c++,do-while,C++,Do While,我写的是这样的代码: do { int i = 0; int j = i * 2; cout<<j; i++; } while (j < 100); do{ int i=0; int j=i*2; cout的j的作用域正好在{}大括号内。不能在循环条件中使用它,循环条件在该作用域之外 从C++草稿标准中我有方便: 在块中声明的名称是该块的本地名称。其潜在作用域从其声明点开始,并在其声明区域的末尾结束 “块”也称为“复合语句”,是一组用大括号括

我写的是这样的代码:

do {
    int i = 0;
    int j = i * 2;
    cout<<j;

    i++;
} while (j < 100);
do{
int i=0;
int j=i*2;

cout的
j
的作用域正好在
{}
大括号内。不能在循环条件中使用它,循环条件在该作用域之外

从C++草稿标准中我有方便:

在块中声明的名称是该块的本地名称。其潜在作用域从其声明点开始,并在其声明区域的末尾结束

“块”也称为“复合语句”,是一组用大括号括起来的语句;
int j = 0;
for(int i = 0;j < 100;++i){
j = i * 2;
cout<<j;
}
对于(int i=0;j<100;++i){ j=i*2;
coutDouble必须更改为无保留单词(感谢Chad),需要在do的范围之外声明,以便在while条件下使用

int i = 0;
int d = 0;
do{
    d = i * 2;
    cout << d;
    i++;
} while (d < 100);
inti=0;
int d=0;
做{
d=i*2;

cout这是不可能的原因。这是由于“声明范围”的限制

您的变量i和j已经用“局部范围”声明——即{}括号内的变量。您实际上希望用“语句范围”声明j,但这是不可能的

语句范围是作为“for”、“while”、“if”或“switch”语句的一部分声明的变量。但是,语句范围不包括do while语句,这就是为什么不能这样做的原因

您基本上已经暴露了使用do-while的语言缺陷

如果提供以下语言会更好:

do {
.
.
.
} while (int j < 100);
do{
.
.
.
}而(intj<100);
但它不提供这种服务。

  • do循环的语法为do{},{}中的任何变量声明将仅存在于该范围内。因此,j的范围仅存在于do{}中,因为它是在此范围内声明的。只能在此范围内调用或引用它
  • 如果要在此作用域之外访问j,则需要将j声明为全局变量。将j的声明移到此作用域之外

double
是一个关键字,是的,
double
(变量)不在循环外的范围内(因此不能用作条件);很抱歉使用double作为变量名。lol。现在编辑此代码。如果它一开始编译的话,它与(;){cout@chris yes的
非常等效(
j
范围问题)“技术原因”在每次进入循环时都要重置和重新初始化的情况下使用变量是完全没有意义的。要解释吗?没有解释的代码是不可接受的。另外,请缩进。-1我英语不好,只是我试图帮助并得到-1真的…是的-1,因为你没有提供任何解释。它是d如果你的英语不是很好,那没关系,但请至少尝试一下。如果你只给出代码而不做任何解释,我们该如何理解你的意思?我知道这似乎很苛刻,但这就是我们如何不断提高自己和自己。没问题,请记住我的投票不是反对你,而是反对这一条信息。我很高兴我喜欢它,因为你试过了。;)如果你想编译它,你可以更改
double
的名称。