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 :

[Débutant] Relancer une fonction après un test conditionnel


Sujet :

C++

  1. #1
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 494
    Par défaut [Débutant] Relancer une fonction après un test conditionnel
    EDIT : C'est le wek-end je suis fatigué on oublie la question :-) Je teste 'o' avec une réponse 'y'
    Je bidouille un petit programme tout bête

    A la fin du programme, je pose une question (y ou n) en demandant si l'utilisateur souhaite relancer le programme.

    Voici ce que j'ai fait et bien évidemment le programme termine au lieu de relancer :

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    cout << "Veux tu rejouer ? (Réponse : y ou n)"<<endl;
    char rep;
    cin >> rep;
    if (rep == 'o')
      { main() ;
      }
    else {  }

    Ma fonction est la fonction principale int main() { ... }
    La question vous l'aurez compris est de comment faire pour relancer le programme ?

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Mets plutôt ton programme dans une autre fonction, et place dans ton main une boucle :

    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
    void MonProg()
    {
        ...
    }
     
    int main()
    {
        char Choix;
        do
        {
            MonProg();
     
            std::cout << "Veux tu rejouer ? (Réponse : y ou n)" << std::endl;
            std::cin >> Choix;
        } while (Choix == 'y');
     
        return 0;
    }
    PS : tester 'o' en demandant 'y' ou 'n' c'est pas très fute-fute

    PS2 : pense à mettre plus de vérifications sur l'entrée utilisateur (voir FAQ C++)

  3. #3
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 494
    Par défaut
    Merci pour ta réponse à ma question super bête
    En C++, je débute vraiment beaucoup et je vais suivre ton conseil (plus de vérifications);-)

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ton problème est-il ?

  5. #5
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 494
    Par défaut
    Rhaaa

    Laisse moi le temps de cliquer je modère les autres forums en même temps

  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
    Salut,

    Juste une petite précision au passage...

    Provoquer la récursivité sur main risque de provoquer, à terme, un débordement de mémoire fatal (surtout si de nombreuses variables sont définies dedans)...

    or il faut pas oublier que faire un main() au sein meme de main(), c'est de la récursivité typique

    Cette intervention n'ayant que pour but "d'enfoncer le clou" quant à la suggestion de Laurent d'appeler une autre fonction pour le travail en lui meme

    [EDIT]
    Avec un code aussi simple que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <iostream>
    static unsigned long pass=0;
    int main(int argc, char **argv)
    {
    	int i=++pass;
    	std::cout<<i<<std::endl;
    	main(argc,argv);
    	return 0;
    }
    le programme plante chez moi (sur un Athlon 1700XP avec 256Mb de ram) apres...43388 passes...Ca peut parraitre beaucoup, mais il ne lui a pas fallu 3 secondes pour y arriver
    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. relancer une fonction après un reload
    Par cijez dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/06/2007, 13h36
  2. Réponses: 1
    Dernier message: 16/06/2007, 21h44
  3. [javascript]execution d'une fonction aprés n seconde
    Par ranell dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 14/04/2007, 17h04
  4. afficher une etiquette apres un test
    Par dieno dans le forum Access
    Réponses: 1
    Dernier message: 09/01/2007, 22h22
  5. Saisir une fonction après le lancement du logiciel
    Par mofetil dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 16/08/2006, 17h56

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