Nombre etrange avec les variables en C

Résolu/Fermé
Takamichi - 27 oct. 2009 à 17:11
 Takamichi - 27 oct. 2009 à 17:36
Bonjour, je suis debutant dans le language C

Voila j'ai un probléme lorsque je rentre une variable de ce genre :
int main()
{
    int age;
    printf("bonjours les amis. \nQuel age avez vous ?      ");
    scanf("%d",age);
    printf("alors comme ca vous avez %d ans ?!",age);

    return 0 ;

}


ou une addtion,soustraction ....etc

et bien lorsque j'ouvre le fichier il me dis que la variable = 24567895132 (enfin un grand nombre)
et losque je modifie la vaiable pour qu'au debut elle sois egale a 0 .....le programme plante je ne vois pas ou est l'erreur .....

merci de votre reponse

4 réponses

Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
27 oct. 2009 à 17:12
scanf("%d",&age);

tu comprendra plus tard dans ton apprentissage qu'il faut passer un pointeur à scanf.. pur cela, tu mets le & devant le nom de la variable


avec ce que tu as fait, tu as écrit la valeur de ton nombre à un endroit aléatoire de la mémoire!

depuis windows 2000 ca va, ca risque pas grand chose (juste un crash de ton application) mais avec windows 98 t'aurai pu avoir un bel écran bleu !
2
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
27 oct. 2009 à 17:26
c'est une vrai erreur de débutant ;)

je vais te donner une petite explication: quand tu passes un parametre, une valeur, à une fonction, tu lui passe une copie de cette valeur (ce qui peut, avec les objets, poser de gros problème si ils sont très gros).
si cette copie est modifiée (donc par ton scanf, c'est ce que tu lui demande), la valeur originale reste intacte !

en mettant un & devant le nom de la variable, tu ne passes pas une valeur, mais un "lien" vers l'adresse memoire contenant cette valeur (ce qu'on appelle un pointeur). De cette manière, la fonction scanf recoit non pas un int, mais un int* ...

donc, d'une manière générale, retiens que si une fonction modifie une valeur, il faut lui passer un pointeur
2
ok merci beaucoup pour cette reponse rapide ^^

je passe en resolu
0
ok et encore merci , je tacherai de m'en souvenir ...!
0