IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

le type de variable d'une fonction de saisie


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Points : 36
    Points
    36
    Par défaut le type de variable d'une fonction de saisie
    bonsoir à tous
    j'ai un probleme dans le type des parametres d'une fonction de saisie de 2 entiers.
    en faite je dois faire une fonction qui saisit 2 entiers a et b, ensuite cette foncton sera appelé dans le main()
    Mon probleme est le suivant,j'ai déclaré au 1er lieu la fonction comme suit:

    1ere solution:saisie par valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void saisie(float x,float y)
    {
    	printf("entrer un 1er reel: ");scanf("%f",&x);
    	printf("entrer un 2eme reel: ");scanf("%f",&y);
    
    }
    
    main()
    {
    float a,b;
    saisie(a,b);
    printf("la somme de %f et %f est %f: ",a,b,a+b); 
    
    }
    Pbl => quand je saisie 3 pour a et 2 pour b en affichage j'arais ":la somme de -10737455.0000 et -1074455.0000 est -214748352".Comme si le programme lit les adresses de a et b et non pas leurs valeurs

    2eme solution:saisie par adresse
    Qd je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void saisie(float *x,float *y)
    {
    	printf("entrer un 1er reel: ");scanf("%f",x);
    	printf("entrer un 2eme reel: ");scanf("%f",y);
    
    }
    
    main()
    {
    float a,b;
    saisie(&a,&b);
    printf("la somme de %f et %f est %f: ",a,b,a+b); 
    
    }
    =>l'execution passe normalement
    De meme si on déclare pas une fonction saisie et je saisie les 2 valeurs ds le main() comme ci l'execution passe normalement et j'aurais les resultats:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void main()
    {
    
    	float a,b;
    	printf("entrer un 1er reel: ");
            scanf("%d",&a);
    	printf("entrer un 2eme reel: ");
            scanf("%d",&b);
            printf("la somme de %f et %f est %f: ",a,b,a+b); 
    }
    SVP aidez moi j'ai pas compri pourquoi ça marche pas correctement avec la 1ere methode et il lit pas les valeurs de a et b mais leurs adresses
    BN

  2. #2
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Points : 2 560
    Points
    2 560
    Par défaut
    Salut,
    En effet, il est tout à fait normal que la première méthode ne marche pas pour faire la somme de a et b
    dans la 1ère méthode, a et b sont des variables "statiques" différents de variables "dynamiques", donc dans ce cas, la valeurs de a et b ne sont pas modifiées après la fonction void saisie(a,b)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Pbl => quand je saisie 3 pour a et 2 pour b en affichage j'arais ":la somme de -10737455.0000 et -1074455.0000 est -214748352".Comme si le programme lit les adresses de a et b et non pas leurs valeurs
    IMPORTANT:
    Ce qu'il faut savoir, c'est que pour la première méthode, la fonction saisie(a,b) ne modifie a et b qu'en interne, mais dès qu'on sort de la fonction, a et b retrouvent leurs valeurs d'avant la fonction saisie(a,b)
    Si tu veux que les modifications de a et b soient prises en comptes il faut qu'ils soient en dynamiques, comme tu as fait pour la méthode 2
    Par ailleurs:
    pour le 3è cas, tu as utilisé des variables statiques, mais le tout marche normalement, car comme je t'ai expliqué pour la première méthode, les variables a et b ne sont modifiés que localement dans la fonction où ils se situent.
    Et vu que void main() est une fonction à part entière, tu vois le résultat correct et attendu sur ton écran !
    J'espère avoir été assez clair pour toi
    Cordialement,
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par soussou80 Voir le message
    SVP aidez moi j'ai pas compri pourquoi ça marche pas correctement avec la 1ere methode et il lit pas les valeurs de a et b mais leurs adresses
    http://emmanuel-delahaye.developpez....ge=Page3#LXIII

    Citation Envoyé par paissad Voir le message
    En effet, il est tout à fait normal que la première méthode ne marche pas pour faire la somme de a et b
    dans la 1ère méthode, a et b sont des variables "statiques" différents de variables "dynamiques",
    Absolument aucun rapport.

    La seule chose à savoir est qu'en C tous les passages de paramètres se font par copie de la valeur. Les paramètres sont des variables locales initialisées au moment de l'appel de fonction. Il est donc inutile de les modifier, elles sont détruites en quittant la fonction (et l'original est bien sûr inchangé). Dans le premier cas, le PO écrivait dans les variables locales (paramètres), ce qui est évidemment sans effet sur les valeurs originales.
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Points : 2 560
    Points
    2 560
    Par défaut
    hmm, autant pour moi alors !
    Merci
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  5. #5
    Membre actif Avatar de jamesleouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 522
    Points : 243
    Points
    243
    Par défaut
    le plus simple aurait été de faire une fonction qui return un float...
    (penses au résolu)

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/08/2007, 22h05
  2. Pb de variable dans une fonction :
    Par soad029 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/10/2005, 13h54
  3. [AS2] déclarer des variables dans une fonction
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 12
    Dernier message: 02/08/2005, 12h50
  4. retour de variable d'une fonction
    Par thunderblade dans le forum ASP
    Réponses: 4
    Dernier message: 28/04/2005, 13h27
  5. Réponses: 5
    Dernier message: 09/02/2005, 18h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo