Partage
  • Partager sur Facebook
  • Partager sur Twitter

Prob déb. en C : prob de logique, accolades, .exe

compiler ok après compilation mais ne s'affichent pas en .exe

    7 septembre 2020 à 23:00:31

    Bonjour à tous, j'aurai besoin de vos conseils et aides pour mon code suivant sur Code:blocks :

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    #include <time.h>
    int main(void)
    {
        {
            Beep(840,50);
            Beep(1440,50);
            Beep(2240,50);
            printf ("\n\t##### Bienvenue Aventurier.#####");
            printf("\n\tCommencons :\n\t");
            printf("Tu es devant un donjon de niveau 10.\n\t");
            printf("Tu as le niveau pour y entrer mais tu vas rencontrer de dangereux ennemis.\n\t");
            printf("As-tu le courage necessaire pour entrer ?\n\t");
        }
        {
            {
                int choixentree;
    
                printf("=== Choix : ===\n\n\t");
                printf("1. Oui j'entre !\n\t");
                printf("2. Euuuh je vais reflechir a la taverne...\n");
                printf("\nVotre choix ? ");
                scanf("%d", &choixentree);
                printf("\n");
    
                switch (choixentree)
                {
                case 1:
                    printf(" Allez c'est parti ! La grande porte s'ouvre et tu as le choix d'une arme a prendre :\n\a");
                    break;
                case 2:
                    printf(" Tu pars en courant et on te retrouve quelques heures plus tard ivre et nu sur la place du village dans du fumier...\n");
                    return;
                }
            }
        }
        {
            {
                int choixarme;
    
                printf("=== Choix : ===\n\n\t");
                printf("1. Veux-tu une grande epee et un bouclier ?\n\t");
                printf("2. Une hache et un arc court ?\n");
                printf("\nVotre choix ? ");
                scanf("%d", &choixarme);
                printf("\n");
    
                switch (choixarme)
                {
                case 1:
                    printf(" Tu obtiens : Une grande Epee et un bouclier rond renforce ! ");
                    break;
                case 2:
                    printf(" Tu obtiens : Une Hache bien affutee et un arc court ! \n\t");
                    break;
                }
            }
        }
        {
            printf("\t\n Tu es dans le hall principal et en jetant un regard sur ce qui t'entoure, tu vois deux directions possibles.\t\n");
        }
    
        {
            {
    
                int choixdir;
    
                printf("\t\n=== Choix : ===\n\n\t");
                printf("1. Tu veux tourner a gauche ?\n\t");
                printf("2. Ou tu prefere prendre a droite ?\n");
                printf("\nVotre choix ? ");
                scanf("%d", &choixdir);
                printf("\n");
    
                switch (choixdir)
                {
                case 1:
                    printf(" Tu tournes pour aller dans le couloir de gauche.");
                    printf(" Tu avances dans ce couloir sombre, pas a pas et arrive devant une porte entre-ouverte laissant echapper un faible lumiere...");
                    printf(" Poussant la porte prudemment et voyant que la salle est inoccupe, tu entres et vois un coffre en bois pres d'un chandelier pose sur une table au milieu de la piece.\t\n");
                    {
                        int choixdir1;
    
                        printf("=== Choix : ===\n\n\t");
                        printf("1. Veux-tu ouvrir ce coffre ?\n\t");
                        printf("2. Non je vais revenir sur mes pas je crois...\n");
                        printf("\nVotre choix ? ");
                        scanf("%d", &choixdir1);
                        printf("\n");
    
                        switch (choixdir1)
                        {
                        case 1:
                            printf(" Tu ouvres le coffre et HAAAAAAA un serpent te mords a la gorge ! ");
                            printf(" On lance un des pour savoir si tu survis... ou pas ! \n");
    
                            {
                                int lancededes = 0;
                                const int MAX = 6, MIN = 1;
                                srand(time(NULL));
                                lancededes = (rand() % (MAX - MIN + 1)) + MIN;
                                printf ("\n Resultat du lance = tu as fait un : ");
                                printf (" %d ", lancededes);
                                int srand = 0;
    
                                if (lancededes >= 5)
                                {
                                    printf (" Coup Critique ! Tu meurs du poison du serpent tres vite.\n");
                                    return;
                                }
                                else if (lancededes < 4)
                                {
                                    printf("Tu as de la chance, il te reste une potion qui restaure ton etat et tes PV.");
                                }
                            }
                        case 2 :
                            printf(" Tu tournes a droite mais...");
    
                        }
                    }
                }
            }
        }
        {
            int choixaction1;
    
            printf(" HAAAAAAA Attention ! Un Gobelin se jette sur toi et tente de te trancher la gorge avec son surin ! ");
            printf(" En te debattant tu arrives a attraper ta hache et decide de lui regler son compte avant de suffoquer. ");
            printf(" Tu lui assenes des grands coups de hache dans les cotes et il finit par te lacher en reculant de quelques metres.");
            printf(" Veux-tu le tuer pour le faire payer de t'avoir blesse ?\t\n");
            printf("\n\t");
            printf("1. Oh que oui ! Creve sale batard de Gobelin ! \n\t");
            printf("2. Non je crois pas...");
            printf("\nVotre choix ? ");
            scanf("%d", &choixaction1);
            printf("\n");
            {
                switch (choixaction1)
                {
                case 1:
                    printf(" Tu prends bien en main ton arme et fonces sur lui en criant de rage !");
                    printf(" Tu lui assenes des coups rapides sur les flancs, tu lui coupes un bras, du sang jaillit de toute part ! ");
                    printf(" Tu t'acharnes sur lui jusqu'a ce qu'il tombe au sol agonisant dans une flaque de son propre sang. Il est mort ! Bravo ! Tu gagnes 1 niveau, + 15 en attaque et +30 en vitesse !\t\n");
                    printf(" Tu fouilles son cadavre et trouve une bourse remplie de 10 pieces d'or, un radis pourri, deux quignons de pains rassis et un message papier de mamie Gobelin :");
                    printf(" N'oublie pas de passer prendre ton linge vendredi mon petit Ernesto ! \n");
                    break;
                case 2:
                    printf(" Je reflechi mais... !");
                }
            }
            {
                int choixfinal;
    
                printf("=== Ton Choix : ===\n\t");
                printf("1. Je continue !\n\t");
                printf("2. Euuuh je vais reflechir a la taverne...\n");
                printf("\nVotre choix ? ");
                scanf("%d", &choixfinal);
                printf("\n");
    
                switch (choixfinal)
                {
    
                    {
                    case 1:
                        printf(" PAUSE JPP je continuerai plus tard ce code de l'enfer  :\n\a");
                        break;
    
                    case 2:
                        printf(" Tu repars a la taverne encore plein d'emotion. Tu passes un nuit entiere aux cotes de jolies femmes ou hommes hein si t'es bi/homo/lgbt+/non binaire... et bois de nombreuses pintes fraiches.\n");
                        break;
                    }
                }
            }
        }
    }
    
    

    Il n'affiche pas d'erreur, se lance très bien en "build&run" mais une fois que je lance le .exe il me fait tout comme il faut sauf le dernier switch (choix final), dès que je tape 1 ou 2 il affiche plus rien et quitte.

    J'ai vérifié les accolades, les ; , les parentheses etc etc cherché d'autres solutions depuis des heures et rien à faire je trouve pas la solution... :(

    Pouvez-vous m'aider s'il vous plaît ?

    -
    Edité par GuillaumeFaudry 8 septembre 2020 à 10:08:13

    • Partager sur Facebook
    • Partager sur Twitter
      7 septembre 2020 à 23:35:11

      Salut,
      Tu as des accolades de trop dans ton code mais elles sont jumelées correctement.
      edit: il y en a vraiment trop, jusqu'à 8 niveaux.
      Tu devrais te faire des fonctions plutôt que de tout imbriquer.
      Les variables définies à l'intérieur d'un bloc { } ne sont pas définies à l'extérieur de ce bloc.
      Places la commande suivante à la fin de ton code:
          system("pause");
      Ton terminal se ferme et tu n'as pas le temps de voir le résultat.
      C'est comme ça avec Code::Block sur Windows.

      -
      Edité par PierrotLeFou 8 septembre 2020 à 7:26:50

      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        7 septembre 2020 à 23:49:09

        Bonjour,

        Mauvais titre

        Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

        Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

        De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

        Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

        Pour modifier votre titre, éditez le premier message de votre sujet.

        (titre originel : Problème débutant en C)

        Liens conseillés

        • Partager sur Facebook
        • Partager sur Twitter
          8 septembre 2020 à 1:32:21

          J'ai fait un copier-coller de ton code et je l'ai essayé. Il y a des erreurs de logique dans ton code. Il sort sans rien demander.
          J'ai refait une compilation avec plusieurs warning en option et les warning traités comme erreurs.
          Voici ce que ça donne:
          (mon fichier s'appelle 'de.c')
          -
          de.c: In function 'main':                                                                                               
          de.c:35:17: error: 'return' with no value, in function returning non-void [-Werror]                                     
                           return;                                                                                                
                           ^~~~~~                                                                                                 
          de.c:5:5: note: declared here                                                                                           
           int main(void)                                                                                                         
               ^~~~                                                                                                               
          de.c:111:33: error: 'return' with no value, in function returning non-void [-Werror]                                    
                                           return;                                                                                
                                           ^~~~~~                                                                                 
          de.c:5:5: note: declared here                                                                                           
           int main(void)                                                                                                         
               ^~~~                                                                                                               
          de.c:106:33: error: unused variable 'srand' [-Werror=unused-variable]                                                   
                                       int srand = 0;                                                                             
                                           ^~~~~                                                                                  
          de.c:99:25: error: this statement may fall through [-Werror=implicit-fallthrough=]                                      
                                   {                                                                                              
                                   ^                                                                                              
          de.c:118:21: note: here                                                                                                 
                               case 2 :                                                                                           
                               ^~~~                                                                                               
          cc1.exe: all warnings being treated as errors                                                                            
          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

            8 septembre 2020 à 10:05:17

            Merci pour les réponses, les accolades c'est parce que j'ai joué avec jusqu’à ce que ça corresponde à ce que je voulais au niveau du suivi des actions/réponses, étant vraiment débutant depuis une semaine dans le code j'essaie des trucs ^^

            Pour les warnings/errors j'arrive pas a interpréter ce que je dois faire du coup...

            - les return; ils doivent être en return(0); c'est ça ?

            - le int main void doit être déclaré c'est à dire ? ca se passe comment ça ?

            - les autres error je comprends pas :(

            Désolé j'ai vraiment des connaissances en code de nouveau né ^^"

            • Partager sur Facebook
            • Partager sur Twitter
              8 septembre 2020 à 10:39:17

              GuillaumeFaudry a écrit:

              - les return; ils doivent être en return(0); c'est ça ? 

              - le int main void doit être déclaré c'est à dire ? ca se passe comment ça ?

              Oui, car main est censé retourner un entier.

              GuillaumeFaudry a écrit:

              - les autres error je comprends pas :(

              Ligne 106 : Tu déclare une variable srand dont tu ne te sert jamais. (attention srand est aussi le nom d'une fonction du C).

              L'accolade ligne 83 tu aurais du la mettre ligne 80. (Ça n'a pas d'incidence sur le fonctionnement de ton code).

              • Partager sur Facebook
              • Partager sur Twitter
                8 septembre 2020 à 12:24:55

                Ok merci j'ai modifié ! :)

                Par contre, toujours ce problème même avec system("pause"); ça se ferme à la dernière réponse du dernier switch une fois que je lance le .exe :(

                -
                Edité par GuillaumeFaudry 8 septembre 2020 à 12:25:28

                • Partager sur Facebook
                • Partager sur Twitter
                  8 septembre 2020 à 13:52:01

                  Il faut le mettre avant chaque return 0 et aussi avant accolade fermante de la fonction main (c'est à dire avant la dernière accolade fermante de ton code).
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 septembre 2020 à 14:34:47

                    GuillaumeFaudry a écrit:

                    depuis une semaine dans le code j'essaie des trucs ^^

                    C'est très bien d'essayer des tas de trucs - ça n'explosera pas, normalement - à condition par finir par en tirer des conclusions fermes, correctes, et utiles.

                    La conclusion, c'est que les accolades servent à encadrer un groupe de déclarations et d'instructions, pour le corps d'une fonction, et pour certaines initialisations. Après ça, il n'y a aucune raison d'en coller à tort et à travers.

                    Pour les warnings/errors j'arrive pas a interpréter ce que je dois faire du coup...

                    - les return; ils doivent être en return(0); c'est ça ?

                    - le int main void doit être déclaré c'est à dire ? ca se passe comment ça ?

                    - les autres error je comprends pas :(

                    Désolé j'ai vraiment des connaissances en code de nouveau né ^^"

                    On retourne quelque chose la déclaration de la fonction dit que la fonction doit retourner quelque chose. C'est le cas ici ligne 5

                    int main(void) {
                      ...

                    donc, par conséquent, dans la fonction main, les instructions return doivent retourner un entier (qui représente, par convention du main,  le code de retour,  zero si tout c'est bien passé)

                    PS: taper 200 lignes de code pour les compiler après donne le "plaisir" d'affronter des dizaines de messages d'erreur d'un coup, et de chercher les causes comme une aiguille dans une botte de foin. Et en plus elles interfèrent, ce qui ajoute du piment à la chose.

                    Bon, faut s'y prendre autrement.

                    • taper une dizaine de lignes, qui ont un résultat prévisible (à défaut de tout faire)
                    • compiler
                    • corriger
                    • compiler
                    • exécuter et regarder si ça fait ce qu'on veut
                    • corriger
                    • compiler
                    • exécuter, etc.
                    • et passer à la suite.

                    Au moins, quand on en a fini avec un paquet de lignes, on est à peu près sûr qu'il ne va pas nous semer le bordel à la compilation.
                    Et que quand on a une erreur après, elle est dans la dizaine de lignes qu'on vient de rajouter.

                    -
                    Edité par michelbillaud 8 septembre 2020 à 14:35:31

                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 septembre 2020 à 14:57:05

                      Tu as un switch autour de la ligne 99 et un case ligne 118.
                      Tu ne mets pas de break après les case (ou avant, si tu veux ...)

                      -
                      Edité par PierrotLeFou 8 septembre 2020 à 14:58:25

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Le Tout est souvent plus grand que la somme de ses parties.

                        8 septembre 2020 à 16:31:57

                        Ah, j'ai oublié, tu peux lancer ton exe directement depuis une console, c'est plutôt la procédure normale pour un programme console, et dans ce cas, tu n'as pas besoin de mettre les system("pause");
                        • Partager sur Facebook
                        • Partager sur Twitter
                          9 septembre 2020 à 8:30:30

                          Merci pour vos retours, j'ai enfin les dernières réponses aux switch qui s'affichent sans que tout se ferme :D

                          Je continue d'étudier vos réponses pour améliorer tout ça, merci encore ! :)

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Prob déb. en C : prob de logique, accolades, .exe

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown