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 :

Mon programme n'appelle pas ses fonctions


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Par défaut Mon programme n'appelle pas ses fonctions
    Bonjour tout le monde!

    J'ai un... problème =D

    J'ai décidé de réécrire un petit programme qui fonctionnait parfaitement (jusqu'à ce que je le modifie à-moitié sans créer de sauvegarde, tout ça ^^).

    Bon, en gros mon programme contient a une structure comme suit (pas d'inquiétude, je vous donne aussi le code plus bas):

    Main:
    - Affiche un "Chargement en cours" bidon.
    - Appelle la fonction "MenuAccueil".
    À terme, le "Chargement en cours" sera remplacé par le logo de ma boîte (parce que oui, j'aurai ma boîte... un jour ^^).

    MenuAccueil:
    - Affiche le titre du jeu, et propose les quatre possibilités suivantes: A Jeu, B Meilleur score, C Crédits, D Quitter.
    - L'utilisateur doit entrer la lettre qu'il veut (majuscules et minuscules sont prises en compte) pour accéder aux différentes possibilités. Quand le choix a été fait, "MenuAccueil" appelle d'autres fonctions.
    - Pour l'instant, les fonctions que "MenuAccueil" doit appeler sont vides, et elles devraient seulement ne rien faire, logiquement.

    Mon problème, c'est que j'ai demandé à ce que ma fonction "MeilleurScore" (qu'on appelle via le menu d'accueil) affiche "Bonjour!" pour voir si ça marchait.
    Que dalle, ça affiche le menu d'accueil en boucle sans dire bonjour!

    Je me suis demandé si je ne devais pas faire quelque chose pour que mon programme reconnaisse les lettres que je lui donne, parce que je sais qu'il reçoit un code pour chaque caractèrs (ASCII par exemple). J'ai un clavier QWERTZ, peut-il y avoir un décalage pour cette raison?
    ...mais quand j'y pense (regardez mon code en-dessous), le programme devrait donc me dire que j'ai écrit une réponse erronée...

    Voici mon code, quand même ;D

    "Main"
    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
    #include <iostream>
     
    using namespace std;
     
    int main()
    // Programme principal
    // Exécution automatique avant toute chose
    // Dirige vers le menu d'accueil
    {
    // Déclaration des variables
     
    // Déclaration des fonctions
    void MenuAccueil();
     
    // Distraction du joueur à l'exécution du programme
    cout << "Chargement en cours..." << endl;
     
    // Ouverture du menu d'accueil
    MenuAccueil();// Appel de MenuAccueil
    }
    "MenuAccueil"
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #include <iostream>
    #include <string.h>
    #include <conio.h>
     
    using namespace std;
     
    void MenuAccueil()
    // Accueillir l'utilisateur
    // Diriger l'utilisateur vers les différentes fonctions du programme
    {   // Déclarer les variables
        string texte;
        int step(1);
     
        // Déclarer les fonctions
        void MeilleurScore();
     
        while(step!=10)
        {   switch(step)
            {   case 1: // Afficher le Menu d'accueil
                    cout << "Menu d'accueil" << endl;
                    cout << "A Jouer" << endl;
                    cout << "B MeilleurScore" << endl;
                    cout << "C Credits" << endl;
                    cout << "D Quitter" << endl;
                    step=2;
                break;
     
                case 2: // Lire la réponse du joueur
                    cin >> texte;
                    step=3;
                break;
     
                case 3: // Lire la réponse du joueur
                    if(texte=="A"||"a")
                        {   // Exécuter la fonction Jeu
                            step=1; // Aller au menu d'accueil
                        }
                    else if(texte=="B"||"b")
                        {   MeilleurScore(); // Exécuter la fonction MeilleurScore
                            step=1; // Aller au menu d'accueil
                        }
                    else if(texte=="C"||"c")
                        {   // Exécuter la fonction Credits
                            step=1; // Aller au menu d'accueil
                        }
                    else if(texte=="D"||"d") // Interrompre le programme
                        {   step=10; // Aller à la dernière étape
                        }
                    else // Réponse erronée
                        {   cout << "Reponse erronee, recommencez" << endl;
                            step=2; // Retourner à la lecture de la réponse du joueur
                        }
                break;
            }
        }
    }
    "MeilleurScore"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>
    #include <string.h>
    #include <fstream>
     
    using namespace std;
     
    void MeilleurScore()
    // Afficher le meilleur Score enregistré
    {   // Déclarer les variables
     
        // Déclarer les fonctions
     
        cout << "Bonjour les amis!" << endl; // TEST
    Voilà. Essayez de compiler ça si vous voulez. À moi, sur avec CodeBlocks, ça rend 0 Error et 0 Warning =D

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Le sujet a été traité récemment, même si c'était au sujet des fonctions inline...

    Je t'inciterais tout particulièrement à lire mes interventions qui suivent le cinquième message .
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre très actif
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Par défaut
    Salut, merci à toi koala... sauf que j'ai toujours mon problème moi!

    Je devrais utiliser des fonctions inline?

    Mon problème c'est que mon code ne renvoie aucune erreur (ni même un avertissement) à la compilation, mais que l'appel de fonctions ne donne rien.

    Mes prototypes et mes appels sont faits correctement, il me semble, alors j'imagine que le problème ne vient pas de là... =)

  4. #4
    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
    Puisque tu déclare une certaine void MenuAccueil(); dans ton main, tu es certain d'avoir une erreur d'acces.

    Mets cette déclaration dans un entête que tu importeras (via un #include), et ca ira mieux.

  5. #5
    Membre très actif
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Par défaut
    Oh, j'avais oublié cette ligne dans la définition de mes fonctions!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "MeilleurScore"
    Et pourtant le problème persiste!
    Mon "Main" appelle très bien la fonction suivante, mais celles-ci n'arrivent pas à s'appeler entre elles... ='(

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Relis correctement mes messages dans la discussion que j'ai citée plus haut...

    Tu remarqueras que tu as le même problème que celui qu'avait josiane avec sa fonction carré:

    En effet, une fois qu'on a supprimé les commentaires de ta fonction main (qui sont de toutes manières inutiles!!!), on a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main()
    {
    // Déclaration des fonctions
    void MenuAccueil(); //TON ERREUR EST ICI!!!!!
    // Ouverture du menu d'accueil
    MenuAccueil();// Appel de MenuAccueil
    }
    La ligne 4 vue sous cet angle déclare une fonction "MenuAccueil" qui n'a strictement rien à voir avec la fonction MenuAccueil qui est définie dans le .cpp correspondant!

    Si tu ne veux pas créer un fichier d'en-tête pour ce seul prototype de fonction, il faut qu'il se trouve en dehors de toute fonction ou portée.

    C'est ce que j'explique dans le message #10 de la discussion dont j'ai mis le lien la tantot
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. Mon programme ne trouve pas le package jt400
    Par Greg.shogun dans le forum JDBC
    Réponses: 2
    Dernier message: 11/05/2007, 10h21
  2. Réponses: 3
    Dernier message: 16/04/2007, 17h01
  3. Mon programme ne marche pas aprés le if:?
    Par mitherkiller dans le forum C
    Réponses: 28
    Dernier message: 28/03/2007, 19h47
  4. Mon programme ne fonctionne pas
    Par phil23 dans le forum C
    Réponses: 4
    Dernier message: 22/03/2007, 16h31
  5. Sos mon programme ne marche pas
    Par monalisa_dulouvre dans le forum C
    Réponses: 49
    Dernier message: 26/12/2006, 18h35

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