En pratiquant le code C ++, j'ai utilisé la variable qui a été déclarée dans la boucle for.Je veux qu'elle l'utilise à nouveau dans une autre boucle for. Mais cela m'a montré une erreur que le
la variable i n'a pas été déclarée dans la portée
et j'ai essayé la même boucle dans Eclipse IDE qu'elle m'a montré
le symbole i n'a pas été résolu
.
L'exemple de code ressemble à ceci:
#include<iostream> using namespace std; int main(){ for(int i=0;i<10;i++){ cout<<i; } for(i=10;i<20;i++){ cout<<i; } }
3 Réponses :
Vous devez déclarer la variable pour chaque portée:
int main(){ for(int i=0;i<10;i++){ cout<<i; } cout<<i; // Error }
Après la première boucle, il n'y a plus de i
. Vous pouvez essayer ce que dit le compilateur et voir que cela échouera:
#include<iostream> using namespace std; int main(){ for(int i=0;i<10;i++){ cout<<i; } for(int i=10;i<20;i++){ cout<<i; } }
En écrivant Si vous voulez réutiliser le Ou, répétez simplement la déclaration avec chaque boucle for (int i = 0; i vous déclarez le
int i
dans le for code> et cela n'a d'effet qu'à l'intérieur de la boucle
for
. int i
, vous devez le placer en dehors de & avant n'importe quelle boucle for
: #include<iostream>
using namespace std;
int main(){
for(int i=0; i<10; i++){
cout<<i;
}
for(int i=10; i<20; i++){
cout<<i;
}
//cout<<i; <- oops!!! error
}
for
puis int i dans les boucles
for
sont des variables totalement différentes. #include<iostream>
using namespace std;
int main(){
int i = 0;
for(i=0; i<10; i++){
cout<<i;
}
for(i=10; i<20; i++){
cout<<i;
}
cout<<i; // <- fine, 20
}
i
défini uniquement dans la portée de la première boucle for
, il doit donc être re-déclaré dans la seconde.
p> Les premiers compilateurs Microsoft C ++ avaient un bogue où le i
fuyait dans la portée de la boucle for
pour produire efficacement
int i; for (i = 0; i < 10; i++){
voulez-vous dire que i
fuit hors la portée de la boucle for? Ou était-ce que le bogue concernant i
d'une boucle fuyait dans la portée de la boucle suivante?
@ user463035818: J'ai mis le code équivalent. Pour autant que je me souvienne, l'initialisation de i
a eu lieu dans la boucle itslef.
intéressant, je suppose que cela peut causer toutes sortes de bugs déroutants, par contre il devrait y avoir une erreur si i
a déjà été déclaré dans la portée externe
Vous devez le déclarer à nouveau dans la deuxième boucle, car il sort du champ d'application après la première boucle.
i
n'existe que à l'intérieur de la première boucle, car vous l'avez déclarée là. Essayer de l'utiliser dans la deuxième boucle vous donne l'erreur. Si vous déplacez leint i;
avant cette boucle, ou si vous le redéclarez dans la deuxième boucle, cela fonctionnerait.travaille pour moi. J'utilise Visual Studio 6;)
Ressemble à la boucle
var
etfor
de JS. :-)@virgesmith: Oui, c'est un bogue dans ce compilateur.
@Bathsheba, je sais. Je n'ai pas utilisé VS6 pendant des années d'ânes, mais la douleur de réparer tout ce qui n'est pas conforme est toujours d'actualité.
en fait pas mon affaire, mais à mon avis, la modification n'était pas vraiment une amélioration (en particulier la question dans le titre a été changée en quelque chose qui a certainement un doublon)
@ user463035818 En fait, ils avaient une raison de changer le titre. Donc c'est d'accord
la question qui est maintenant dans le titre a une réponse par exemple ici: stackoverflow.com/questions/10056093/... (je voterais pour un doublon si cela ne fermait pas la question immédiatement), mais le titre avant était mieux pour décrire votre question exacte