Partage
  • Partager sur Facebook
  • Partager sur Twitter

Supprimer automatiquement mon programme en fin d'execution

Sujet résolu
    21 octobre 2008 à 20:40:07

    Bonsoir,

    Je me suis mis récemment à la programmation, et plus particulièrement au C. Je suis entrain de lire le tutoriel de M@teo21 ( superbement bien créé ! ) j'ai bientôt fini la partie II.
    Je me suis donc mis à tester des programmes de ma conception, plus ou moins utiles (plutôt moins que plus pour le moment ^^) et je suis arrivé sur le problème suivant :

    Mon programme est tout simple : Il affiche une énigme (en printf tout bête), demande la réponse (scanf tout bête, j'avais prévenu, je débute vraiment hein !), et si la réponse est bonne, affiche l'énigme suivante, etc... On a donc plein de conditions en if inclues les unes dans les autres (il y a surement une autre méthode moins lourde en code, ce qui d'ailleurs m'arrangerait au passage si quelqu'un pouvait me donner une piste... pas un code svp, j'aimerais chercher :) ).
    Seulement mon programme a un problème majeur : Si la personne se trompe, elle n'a qu'à relancer le programme et essayer une autre réponse, etc... jusqu'à la trouver... Ce que je cherche, c'est mettre un compteur avec une décrémentation toute simple à chaque fois que la personne se trompe, et lorsque le compteur arrive à 0, le programme se supprime...
    Je vois comment faire pour supprimer un fichier externe au programme, mais pas pour supprimer le programme en lui même...

    Voila, j'espère avoir été clair, et avoir une réponse le plus rapidement possible svp :)

    BugSeeker
    • Partager sur Facebook
    • Partager sur Twitter
      21 octobre 2008 à 20:47:26

      Salut, a priori une boucle pourrait fonctionner,par contre je suis pas sur de comprendre quand tu dit vouloir supprimer ton programme tu entend qu'il se ferme ou se supprime complètement ? o_O

      A part ça t'aider précisément sans le code risque de ne pas être évident :p

      • Partager sur Facebook
      • Partager sur Twitter
        21 octobre 2008 à 20:49:14

        Alors normalement tu peux supprimer ton exécutable via la fonction que tu utilise, car le programme doit sans doute être copié dans la mémoire puis exécuté ;)
        • Partager sur Facebook
        • Partager sur Twitter
          21 octobre 2008 à 20:52:47

          Il veut que quand le joueur ai raté jusqu'a ce que son score atteigne 0, le programme s'efface...
          J'ai une solution...
          Au moment ou le joueur atteint 0, tu écris un prog en batch qui va détruire le programme et s'auto-détruire...
          maintenant, je sais pas si tu connais le batch, mais j'ai déjà fait ca e pascal et ca marche a merveille !
          • Partager sur Facebook
          • Partager sur Twitter
            21 octobre 2008 à 20:54:51

            Non non j'entends bien qu'il se supprime complètement, et définitivement, le fermer il le fait déjà automatiquement quand la personne se plante :) Vous avez vraiment besoin du code ? en gros voila la structure :


            #include <stdio.h>
            #include <stdlib.h>

            int main(int argc, char *argv[])
            {
            long choixJeu, reponse1, reponse2, reponse3, reponse4;

            printf("Enigme1");
            scanf("%ld", &reponse1);

            if(reponse1==1)

            {

            printf("2ème Enigme");
            scanf("%ld", &reponse2);

            if(reponse2==1)

            { ............................

            }

            else { // c'est ici que j'aimerais mettre la fonction de compteur qui se décrémenterait, et une fois qu'il tomberait à 0, le programme se supprimerais // }

            }

            else

            { ....

            }

            system("PAUSE");
            return 0;
            }

            je l'ai mis vite fait, il y a peut-etre des problèmes de syntaxe, n'en tenez pas compte, il n'y en a pas dans mon vrai code source (que je n'ai pas sous la main dsl )

            @conflict : exactement ce que je veux, mais non je ne connais pas le batch, comme je l'ai dit, je débute vraiment (cf. la structure de mon programme :p )

            @gogohan : comment puis-je faire ça ? en terme simples svp :)
            • Partager sur Facebook
            • Partager sur Twitter
              21 octobre 2008 à 21:22:47

              ce que tu peux faire :
              //Si le joueur a raté et son score atteri a 0
              
              
              
              FILE* fichier = NULL;
              fichier = fopen("DETRUIRE.BAT", "w");
              if (fichier != NULL)
              {
                fputs('del MONPROGRAMME.EXE"', fichier); // On écrit la commande batch qui détruit le prog
                fclose(fichier);
                system("DETRUIRE.BAT");
              }
              


              Voila...j'imagine que ca fonctionne en C comme en pascal,mais ca ne fonctionne que sous windows...


              PS:Tu peux rajouter "del DETRUIRE.BAT" dans le fputs...normalement,ca le supprimera aussi !
              • Partager sur Facebook
              • Partager sur Twitter
                21 octobre 2008 à 21:28:21

                La j'ai un problème, de compréhension cette fois :p

                Déjà certains trucs que tu utilise dans ton bout de programme je vois pas trop à quoi ça correspond (pas encore appris ça moi ^^) donc est-ce que tu pourrais m'expliquer les quelques lignes de code stp ?

                Pourquoi ouvrir le programme "DETRUIRE.BAT" ? Il faudrait alors que je crée celui-là non ? Je vois pas comment faire, et je crois avoir oublié de préciser qqch : l'idéal serait que mon programme ne comporte qu'un fichier .exe, car je le passe sur USB, la personne fait un c/c et voilou, sinon il suffit qu'elle ne copie pas le DETRUIRE.BAT et ça ne fonctionnera plus...

                qu'est-ce que le "w" en argument de fopen ?

                Sinon merci beaucoup conflict !
                • Partager sur Facebook
                • Partager sur Twitter
                  21 octobre 2008 à 21:37:34

                  Bon, il y a les fonctions remove(const char *path) et unlink(const char *path) qui permettent de supprimer un fichier ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 octobre 2008 à 21:43:12

                    ces fonctions ne permettent pas de supprimer le programme qui les execute, si je me plante pas... non ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 octobre 2008 à 7:58:39

                      Bon, puisque tu doutes, compile ce code ;)

                      #include <stdio.h>
                      
                      int main (int argc, const char * argv[]) 
                      {
                          printf("Le programme %s va etre supprime...\n", argv[0]);
                      	
                      	if(!remove(argv[0]))
                      		printf("Le programme %s a ete supprime...\n", argv[0]);
                      	else 
                      		printf("Le programme %s n'a pas ete supprime...\n", argv[0]);
                      	
                          return 0;
                      }
                      


                      Et ben moi, quand je démarre mon programme, il se supprime ;)
                      Mais je te l'ai déjà dit: Le programme est chargé en mémoire pour avoir les meilleurs performances, et y est exécuté. Ton programme sur ton Disque dur peut être effacé, car il s'agit tout de même d'un fichier ;)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 octobre 2008 à 8:42:14

                        Citation : gogohan

                        Et ben moi, quand je démarre mon programme, il se supprime ;)


                        Pas chez moi, de plus il faut inclure stdlib.h pour utiliser system.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          22 octobre 2008 à 13:08:12

                          Il faut concevoir ton programme différement, c'est tout

                          Un fichier avec plein de questions, un autre avec les réponses, et tu pioches aléatoirement dedans.

                          Pas besion de supprimer ton programme. De plus, il na faut pas mettre tes questions en dur dans le programme, mais dans des fichiers à part. Comme ça si tu veux en rajouter, c'est super simple !

                          • Partager sur Facebook
                          • Partager sur Twitter
                            22 octobre 2008 à 13:19:08

                            Citation : damien73

                            Il faut concevoir ton programme différement, c'est tout

                            Un fichier avec plein de questions, un autre avec les réponses, et tu pioches aléatoirement dedans.

                            Pas besion de supprimer ton programme. De plus, il na faut pas mettre tes questions en dur dans le programme, mais dans des fichiers à part. Comme ça si tu veux en rajouter, c'est super simple !



                            ça ne répond pas à sa question :p

                            Citation : brugnar

                            Pas chez moi, de plus il faut inclure stdlib.h pour utiliser system.


                            Tu es sous Windows ? En tout cas sous Mac c'est O.K. :p
                            Essayes de démarre ton programme juste à partir de l'exécutable, pas de build and go :p

                            Mais il n'y a pas besoin de la fonction system() ;)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 octobre 2008 à 16:05:27

                              Citation : gogohan

                              Essayes de démarre ton programme juste à partir de l'exécutable, pas de build and go :p


                              Oui oui, j'ai essayé de lancé l'exécutable a part, en dehors du build and go. Apparemment cela ne fonctionne pas sous windows vista.

                              Citation : gogohan

                              Mais il n'y a pas besoin de la fonction system() ;)


                              Erreur de ma part, j'avais rajouté system("pause") justement pour voir si cela fonctionnait en dehors du programme :-°
                              • Partager sur Facebook
                              • Partager sur Twitter
                                22 octobre 2008 à 16:12:43

                                mhhh moi je comprend pourquoi tu veux detruire le programme c'est bete pourquoi pas mettre plutot des question que l'ordi génère au hazard?? sa te fera un peu plus de code certe mais deja sa te fera pas mettre des codes bizzard que tu ne comprend pas voila je sais pas si je t'ai aider en te disant cela mais bon ^^ ciao! (ps: je viens juste de voir que damien73 avait deja mis l'idee ^^" mais bon perso je suis tout a fait d'accord avec lui ca me semble bocoup mieux comme solution surtout que c'est largement codable avec ton niveau)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  22 octobre 2008 à 17:31:33

                                  Coder avec une fonction hasard pour les questions (je suppose srand() ) est pas mal comme idée, j'y ai pensé, en ajoutant un compteur de points genre "si on réponds correctement à 5 questions d'affiler on a gagné... Seul problème : les questions seront TOUJOURS en nombre fini, donc au bout d'un moment on retombe sur les mêmes questions, assez rapidement puisque je ne souhaite pas inclure plusieurs centaines d'énigmes :D Néanmoins pour le moment je vais opter pour cette solution, en même temps ça m'entrainera :) Par contre, j'ai quelques questions concernant la façon dont coder ça :

                                  si j'ai bien compris, je mais mes questions dans un fichier ( .c I guess ) et mes réponses dans un autre... c'est à dire que je dois créer une fonction pour chaque question c'est ça ? et le programme principal appellera une fonction, et suivant ce que l'utilisateur entre comme données, appellera la réponse, située dans un autre fichier, sous la forme de fonction ? Ai-je bien compris ? Je dois donc avoir au total 3 fichiers .c : Le principal, les questions, et les réponses (en faisant gaffe de pas me tromper et d'attribuer la bonne question à la bonne réponse :D )

                                  voila voila :D

                                  Merci beaucoup à tous en tout cas pour la qualité des réponses et la rapidité, je suis nouveau sur ce forum et ça débute bien ! :)

                                  EDIT : @Flindo : Qu'un programme se supprime tout seul peut avoir un tas d'utilités, et même si ce n'est pas crucial ici, c'est qqch qui m'intrigue donc je me renseigne en même temps :)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    22 octobre 2008 à 19:31:25

                                    Citation : BugSeeker

                                    si j'ai bien compris, je mais mes questions dans un fichier ( .c I guess ) et mes réponses dans un autre... c'est à dire que je dois créer une fonction pour chaque question c'est ça ? et le programme principal appellera une fonction, et suivant ce que l'utilisateur entre comme données, appellera la réponse, située dans un autre fichier, sous la forme de fonction ? Ai-je bien compris ? Je dois donc avoir au total 3 fichiers .c : Le principal, les questions, et les réponses



                                    Dans les fichiers .c, on écrit du code C. Des questions et des réponses c'est pas du code C, c'est du texte brut. Tu ne comptes quand même pas les compiler ?
                                    Et puisque je vois que tu étais prêt à créer un exécutable autodestructible... a moins que tu ne chiffres les données, tu prends le risque que le mec à qui tu file ton programme n'ait qu'à ouvrir le fichier réponses pour le lire.

                                    Et non, il n'est pas nécessaire de créer une fonction pour chaque question.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      23 octobre 2008 à 12:23:00

                                      Citation : gogohan

                                      Citation : damien73

                                      Il faut concevoir ton programme différement, c'est tout

                                      Un fichier avec plein de questions, un autre avec les réponses, et tu pioches aléatoirement dedans.

                                      Pas besion de supprimer ton programme. De plus, il na faut pas mettre tes questions en dur dans le programme, mais dans des fichiers à part. Comme ça si tu veux en rajouter, c'est super simple !



                                      ça ne répond pas à sa question :p



                                      Non en effet, mais ça répond au problème global et ça lui permet d'acquérir une nouvelle vision sur la conception.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        23 octobre 2008 à 18:08:02

                                        @ mcyrb : donc je dois faire un fichier texte pour chaque question, un pour chaque réponse, et mon programme piochera dedans... jusque là ok... par contre ça impose un dossier pour mon programme puisqu'il doit savoir ou se trouvent les réponses et les questions non ? Et si je mets mes fichiers textes en .enigme ou quelque chose comme ça, est-ce qu'il est possible de forcer l'ouverture avec un bloc note ou qqch comme ça, et de les lire ? Ou est-ce que le bloc note, ou word ou n'importe, ne reconnaissant pas le fichier, refusera de l'ouvrir ?
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          23 octobre 2008 à 18:30:02

                                          Essaie par toi même, créer un fichier .cequetuveut, met des phrases dedans puis fait clique droit, ouvrir avec bloc note, ou envoyer vers bloc note ^^

                                          Pour répondre a ta question, quelque soit l'extension tu peut forcer l'ouverture avec le bloc note (même un .exe mais c'est illisible :p )

                                          La solution la plus probable serait de crypter le contenu des fichiers, mais la dessus je ne peut pas t'aider :euh:

                                          PS : si on peut empêcher ça,je ne suis pas au courant en tout cas :p
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            23 octobre 2008 à 19:27:08

                                            Citation : BugSeeker

                                            @ mcyrb : donc je dois faire un fichier texte pour chaque question, un pour chaque réponse, et mon programme piochera dedans...



                                            Tu peux faire un fichier pour toutes les questions et un fichier pour toutes les réponses, tu peux aussi faire un seul fichier qui contient les deux... à toi de voir comment tu t'organises, y a rien d'obligatoire.

                                            Citation : BugSeeker

                                            jusque là ok... par contre ça impose un dossier pour mon programme puisqu'il doit savoir ou se trouvent les réponses et les questions non ?



                                            Il suffit d'utiliser un chemin relatif pour accéder à tes fichiers, où le point de départ n'est pas la racine du disque (C: ou /) mais le répertoire dans lequel ton exécutable se trouve. Mais il est évident que les fichiers devront être là où le programme les attend.

                                            Citation : BugSeeker

                                            Et si je mets mes fichiers textes en .enigme ou quelque chose comme ça, est-ce qu'il est possible de forcer l'ouverture avec un bloc note ou qqch comme ça, et de les lire ? Ou est-ce que le bloc note, ou word ou n'importe, ne reconnaissant pas le fichier, refusera de l'ouvrir ?



                                            Tu sais, l'extension d'un fichier c'est une notion qui est très liée au monde Windows, mais c'est juste un suffixe dans son nom pour donner une simple indication sur le type de fichier dont il s'agit, sa présence n'est ni obligatoire, ni garante de quoique ce soit quant à son contenu. Au final, le contenu de ton fichier, que ce soit un document word, une image jpeg, ou un executable, c'est une série d'octets que n'importe quelle application (un bloc-notes, un editeur de texte quelconque, ou autre... y compris le programme que tu es en train de coder) peut lire pour peu que le système lui en donne l'autorisation.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              23 octobre 2008 à 19:38:13

                                              C'est peut-être une bonne occasion de s'initier aux joies du cryptage. :)

                                              Ok, je sors... :-°
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Supprimer automatiquement mon programme en fin d'execution

                                              × 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