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 :

Appeler des fonctions


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2013
    Messages : 2
    Par défaut Appeler des fonctions
    Bonjour à tous,
    Je viens ici recueillir votre expérience afin que vous puissiez m'éclairer sur un petit problème.

    Le voici :

    • Expérimentant mes codes en C++, je teste diverses choses chaque soir en rentrant du lycée afin de mieux me préparer à ma prochaine école.
    • Ce soir, je me suis penché sur le ' problème ' des fonctions.
    • J'ai donc fait un test de petit programme sans avoir rien regardé à côté afin de voir si j'y arrivais seul.
    • Surprenant, j'arrive à faire rediriger la fonction main qui ira dans la fonction menu . Une fois dans celle-ci , je propose deux choix vers deux autres fonctions.
    • Or , dans cette fonction menu , je n'ai pas le choix et le programme me redirige directement à la dernière fonction , reconnaissable par le texte.

    J'en arrive donc à vous demander comment faire pour appeler correctement des fonctions / procédures et que mettre dedans de particuliers ? ( return etc .. )

    Voici mon programme de test :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include <iostream>
     
    using namespace std;
     
    int test();
    int test2();
    int menu();
    int choix;
     
    int main()
    {
        menu();
        return 0;
    }
     
    int menu()
    {
        cout << "Aller dans quelle fonction ?"<<endl;
     
        switch (choix)
        {
            case 1 : test();break;
            default : test2();break;
        }
        return 0;
    }
    int test()
    {
        cout << "\nFONCTION TEST!"<<endl;
    }
     
    int test2()
    {
        cout << "\nFONCTION TEST2!"<<endl;
    }
    Voici maintenant le résultat lors de l’exécution de mon problème :
    http://www.developpez.net/forums/att...1&d=1365488127


    J'espère avoir été le plus clair possible,
    En attente de vos aides, merci d'avance .
    Images attachées Images attachées  

  2. #2
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    une fonction est relativement complexe !

    Je pense que lire ce cour serait très instructif, il répond au questions principales.

    Si certaines parties posent problème, on est là !

  3. #3
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Hello,

    Citation Envoyé par Rave- Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int menu()
    {
        cout << "Aller dans quelle fonction ?"<<endl;
        cin >> choix; // récupérer le choix de l'user
        switch (choix)
        {
            case 1 : test();break;
            default : test2();break;
        }
        return 0;
    }
    Nul part choix est initialisé. Il prend donc une valeur aléatoire (la valeur que la mémoire contient à son emplacement). Vu qu'il prend une valeur pseudo-aléatoire, il à de grandes chances d'être différent de 1, et donc ton switch appelle test2.
    std::cin, qui marche comme std::cout te permet de récupérer des données écrites au clavier.

    Attention aussi à tes fonctions test et test2 qui devraient retourner un int mais qui ne le font pas. Tu peux les déclarer void (void test() { ... }) si elles n'ont rien besoin de retourner.

  4. #4
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2013
    Messages : 2
    Par défaut
    Tout d'abord, merci à vous de vos réponses !


    Iradrille,
    Merci beaucoup, tu viens de m'expliquer pourquoi mon switch renvoyait directement à la deuxième case.
    Par contre, tu dis que choix n'est nul part initialisé, or je l'ai placé avant la fonction main. J'en conclus donc que c'est un mauvais choix ?

    Ensuite, je pensais à les déclarer en tant que void, mais en testant, j'obtenais le même << résultat >> .


    PilloBuenaGente,
    Merci également de ton aide, je pense que re-lire ce cours ne me fera pas de mal !
    Si j'ai des questions, je n'hésiterai pas , merci


    Je referais donc des tests supplémentaires et essaierai de trouver par moi même , merci en tout cas !


    C'est bon, problème résolu !
    Pour ceux curieux de savoir, je n'avais tout simplement pas mis un cin , demandant donc vers quelle fonction aller !

  5. #5
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Citation Envoyé par Rave- Voir le message
    Par contre, tu dis que choix n'est nul part initialisé, or je l'ai placé avant la fonction main. J'en conclus donc que c'est un mauvais choix ?
    Les variables globales sont généralement à éviter oui.
    Ici, choix peut être déclaré dans menu.

  6. #6
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Un petit peu de vocabulaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int v; // v est déclaré et défini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int v; // v est déclaré et défini
    v = 0; // v est affecté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int v = 0; // v est déclaré et défini et initialisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int v(0); // v est déclaré et défini et initialisé (grosso modo : syntaxe pour les objets mais possible aussi pour les types de base)
    Une règle simplifiée : toute variable déclarée et défini doit être initialisée (ou affectée juste après la définition (lorsqu'on utilise std::cin par exemple)).
    Autre règle simplifiée (comme le dit Iradrille) : la portée (la durée de vie) des variables doit être limité aux blocs (ce qu'il y a entre deux { }) qui en ont besoin. C'est-à-dire que l'on ne déclare des variables que lorsqu'on en a besoin.

  7. #7
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Ce n'est pas le bon vocabulaire.
    • extern int v; déclaration d'une variable (définie ailleurs).
    • int v; définition arbitaire
    • int v = 2; définition
    • v = 2; affectation
    • int f(); déclaration d'une fonction (définie ailleurs).
    • int f(){return 0;} définition d'une fonction
    • class s; déclaration d'une classe (marche aussi pour les structures)
    • class s{/**/}; définition d'une classe


    Sachant cela, la règle absolue est:
    Chaque chose doit être définie une et une seule fois.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/09/2006, 19h06
  2. Comment appeler des fonctions C# sous Excel
    Par ttttnht dans le forum Windows Forms
    Réponses: 1
    Dernier message: 12/09/2006, 16h49
  3. appel des fonctions d'un driver dans un programme en c
    Par richie25 dans le forum Windows
    Réponses: 5
    Dernier message: 10/01/2006, 08h27
  4. Réponses: 6
    Dernier message: 30/09/2005, 00h53
  5. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33

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