2016-06-03 1 views
1

Je suis novice en programmation. J'essayais d'obtenir la somme de l'équation ajoutée à la valeur précédente quand j'ai remarqué un comportement étrange.Programmeur débutant C++ (déclaration de variable locale/globale)

Si je déclare int result l'intérieur int main() puis-je obtenir une réponse vide, mais si je déclare int result en dehors int main() puis-je obtenir ces valeurs: 6,11,16 ... 91,96,101. Cela n'a pas de sens pour moi puisque je n'ai pas d'autre fonction.

Pourquoi cela se produit-il?

#include<iostream> 
using namespace std; 

int main() 
{ 
    int y =1; 
    int result; 

    while (result <100) 
    { 
    result = y +5; 
    cout << result << ","; 
    y = result; 

    } 
} 
+0

[Clang] (http://coliru.stacked-crooked.com/a/b339bef1faf5e3ac) n'est pas aussi tolérant. –

+0

Pourquoi avez-vous besoin de deux variables? Vous pouvez juste faire 'y = y + 5;' – Barmar

Répondre

5

Au sein d'une fonction, int result; déclare une variable nommée result, mais n'initialise pas à une valeur particulière. Jusqu'à ce que vous lui assigniez une valeur, cela pourrait être n'importe quoi, et le comportement lors de la lecture n'est pas défini. Ainsi, lorsque vous lisez sa valeur dans votre condition while, cela pourrait être n'importe quoi; votre boucle peut s'exécuter ou non. Vous devez fournir une valeur initiale pour result pour rendre le comportement de votre programme bien défini:

int result = 0; 

Contrairement à la variable locale, les variables globales sont définies à initialiser à une valeur par défaut si aucune valeur initiale est explicitement prévue, Ainsi, lorsque vous lisez la valeur result dans votre condition while, il s'agit de 0 et votre boucle s'exécute.