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 :

scanf utilisé dans une fonction


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 16
    Par défaut scanf utilisé dans une fonction
    bonjour,
    je code un petit programme pour m'exercer aux fonctions.
    Le principe est que je renvoie mon age a l'ordi, et que celui ci me renvoie l'age de mon frere en connaissant notre difference d'age.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    #include <stdio.h>
    #include <stdlib.h>
     
    void frero(float n)
    {
       float k;
        k=n+8.5;
        printf("l'age de guillaume:%f\nle mien:%f",k,n);
    }
    int main()
    {
        float n;
        printf("mon age?\n");
        scanf("%f",&n);
        frero(n);
        return 0;
    }
    pas de souci dans ce cas, tout fonctionne.
    ce que j'aurrais aimé faire, c'est plutot que de demander mon age dans le main(), cela aurait été plutot de creer une fonction qui demande et prenne la valeur n de l'age et la renvoye tout de suite a la fonction frero().
    ce que je fais ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #include <stdio.h>
    #include <stdlib.h>
     
    float print()
    {
     float n;
     printf("mon age?\n");
     scanf("%f",&n);
     return (n);
    }
    void frero(float n)
    {
        float k;
        k=n+8.5;
        printf("l'age de guillaume:%f\nle mien:%f",k,n);
     
    }
    int main()
    {
        float n=0;
        print();
        frero(n);
        return 0;
    }
    lorsque je compile:
    mon age?
    10
    l'age de guillaume:8.500000
    le mien:0.00000
    press enter to continue

    dans le main, je met n à zero pour faciliter la lecture du resultat, rien d'important.
    On vois bien que l'age n'a pas ete pris en compte et du coup n'est pas repercuté sur la fonction frero.
    Au vue du premier code, j'ai un soucis au niveau de la fonction print().
    est il possible d'inclure un scanf dans une fonction? ou ai je fais une erreur?
    merci

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Tu oublies d'affecter n :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main(void)
    {
        float n;
        n = print();
        frero(n);
        return 0;
    }
    Dernière modification par Invité(e) ; 01/09/2009 à 22h35. Motif: void manquant dans le prototype de main.

  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Salut.

    Autre solution (parmi tant d'autres) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include <stdio.h>
    /* #include <stdlib.h>, sert à quoi ici ? */
     
    float age;
    void print(void)
    {
     printf("mon age?\n");
     scanf("%f",&age);
    }
    float frero(float age)
    {
        float age2;
        age2=age+8.5;
        printf("l'age de guillaume:%f\nle mien:%f\n",age2,age);
        return age;
     
    }
    int main (void)
    {
        print();
        frero(age);
        return 0;
    }

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par ok.Idriss Voir le message
    Salut.

    Autre solution (parmi tant d'autres) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include <stdio.h>
    /* #include <stdlib.h>, sert à quoi ici ? */
    
    float age;
    void print(void)
    {
     printf("mon age?\n");
     scanf("%f",&age);
    }
    float frero(float age)
    {
        float age2;
        age2=age+8.5;
        printf("l'age de guillaume:%f\nle mien:%f\n",age2,age);
        return age;
     
    }
    int main (void)
    {
        print();
        frero(age);
        return 0;
    }
    Attention, avec cette solution, on introduit une variable globale alors que c'est inutile (et déconseillé).

    De plus, il y a confusion entre la variable globale et la variable locale dans le fonction frero...

  5. #5
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Citation Envoyé par mabu Voir le message
    Attention, avec cette solution, on introduit une variable globale alors que c'est inutile (et déconseillé).
    Bon c'est vrai mais elle ne gène pas trop à ce stade ...

    Citation Envoyé par mabu Voir le message
    De plus, il y a confusion entre la variable globale et la variable locale dans le fonction frero...
    J'avais hésité à en mettre une autre mais je les vois bien comme deux variables distinctes ... je vais modifier au cas où.

    Bref, j'ai écris ce post rapidement, si j'avais vu ta réponse apparaître, je n'aurais pas pris la peine de le faire (tu m'a grillé) ... ta solution est préférable.

    Edit : voilà un code corrigé (plus de globale et plus de confusion entre les noms de deux variables distinctes) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include <stdio.h>
     
    float print (void)
    {
     float age2;
     printf("mon age?\n");
     scanf("%f",&age2);
     return age2;
    }
     
    float frero(float age)
    {
        float age2;
        age2=age+8.5;
        printf("l'age de guillaume:%f\nle mien:%f\n",age2,age);
        return age;
    }
     
    int main (void)
    {
        float age3=print ();
        frero(age3);
        return 0;
    }

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par ok.Idriss Voir le message
    Bon c'est vrai mais elle ne gène pas trop à ce stade ...
    Je suis d'accord, mais il n'est jamais trop tôt pour ne pas prendre une mauvaise habitude.


    Citation Envoyé par ok.Idriss Voir le message
    voilà un code corrigé (plus de globale et plus de confusion entre les noms de deux variables distinctes) :
    Après, on peut tout à fait avoir plusieurs variables qui ont le même nom dans différentes fonctions (pas de chevauchement de portée).

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 16
    Par défaut
    Entendu...merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. parametre fonction utilisé dans une autre fonction
    Par pascale86 dans le forum Langage
    Réponses: 1
    Dernier message: 26/11/2010, 09h49
  2. [Dojo] Objet Dojo créé dans une fonction et utilisé dans une autre.
    Par hapalemur dans le forum Bibliothèques & Frameworks
    Réponses: 10
    Dernier message: 05/06/2009, 13h59
  3. Réponses: 3
    Dernier message: 03/08/2007, 07h36
  4. [debutant] scanf de char dans une fonction
    Par méphistopheles dans le forum Débuter
    Réponses: 7
    Dernier message: 31/01/2007, 22h56
  5. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14

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