Use variables declared inside do-while loop in the condition [duplicate]

倖福魔咒の 提交于 2019-11-30 02:07:47

问题


I was writing something like this code:

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

    i++;
} while (j < 100);

(http://codepad.org/n5ym7J5w)

and I was surprised when my compiler told me that I cannot use the variable 'j' because it is not declared outside the do-while loop.

I am just curious about if there is any technical reason why this cant be possible.


回答1:


There is a reason why this can't be possible. It is due to the limitation of "statement-scope".

Your variables i and j have been declared with "local scope" -- that is variables inside {} brackets. You actually wanted j to be declared with "statement scope" but this is not possible.

Statement-scope are those variables declared as part of 'for', 'while', 'if' or 'switch' statements. Statement scope does not cover do-while statements, though, which is why you cannot do this.

You have basically exposed a language drawback of using do-while.

It would be better if the language offered:

do {
.
.
.
} while (int j < 100);

but it does not offer this.




回答2:


The scope of j is just within the {} braces. You can't use it in the loop condition, which is outside that scope.

From a C++ draft standard I have handy:

A name declared in a block is local to that block. Its potential scope begins at its point of declaration and ends at the end of its declarative region.

A "block" is also known as a "compound statement", and is a set of statements enclosed in braces {}.




回答3:


Double, which must be changed to an unreserved word (thanks Chad), needs to be declared outside the do's scope in order to be used in the while condition.

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



回答4:


  • The syntax for do loop is do{ } any variable declaration within the { } will only exist within this scope. Therefore the scope of j is only within do{ } because it was declared within this scope. It can only be called or referenced within this scope.
  • If you want to access j outside this scope, you need to declare j as global variable. Move the declaration of j outside this scope.



回答5:


int j = 0;
for(int i = 0;j < 100;++i){
j = i * 2;
cout<<j;
}

before every loop set i = 0; and declarate as int + for loop works better



来源:https://stackoverflow.com/questions/18541304/use-variables-declared-inside-do-while-loop-in-the-condition

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!