Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème "fscanf" ?

Comment scanner sulement un nombre ^^ ?

    20 avril 2006 à 18:57:51

    Bonjour :) ,

    J'ai un problème avec fscanf ( enfin ce n'est pas fscanf qui pose le problème ):

    Voici le fichier externe :
    {[PGPF]1101011@0111011@0011010@0101101@1001101@0010001@1001101}

    Je voudrais que dès qu'il y a un '1' l'ordi fasse qq chose, quand il y a un '0' il fasse autre chose et quand il y a un '@' il aille à la ligne


    Alors, pour l'instant, j'ai ça :

            while( !feof(fichierPGP))
            {
                fscanf(fichierPGP,"{[PGPF]%ld",&nombreFichier);
                fseek(fichierPGP,15, SEEK_SET);
                fscanf(fichierPGP,"%ld",&nombreFichier2);
                printf("\n%ld\n",nombreFichier);
                printf("%ld\n",nombreFichier2);
                getchar();
            } 

    Et ça ne fonctionne déja pas :

    la variable nombreFichier est correcte : elle vaut 1101011
    Mais la variable nombreFichier2 vaut 111011 alors qu'elle doit valoir 0111011 o_O


    Alors je me demandais :
    - Comment faire pour que à chaque fois, on scanf le nombre et regarde si c'est un "1", un "0", ou un "@"
    - Comment faire pour ouvrir un fichier dont on ne connaît pas le nom
    ( exemple on demande à l'utilisateur d'entrer le nom du fichier à ouvrir )




    Merci d'avance ^^
    • Partager sur Facebook
    • Partager sur Twitter
      20 avril 2006 à 19:01:20

      si tu veux 0111011 à la place de 111011 c'est que tu veux "0111011" et donc travailler avec des chaines et après tu regardes caractère par caractère pour faire tes actions.

      Tu peux même directement lire caractère par caractère et faire les actions au fur et à mesure (mais comme je sais pas ce que tu fais je peux pas deviner quelle méthode te convient le mieux).
      • Partager sur Facebook
      • Partager sur Twitter
        20 avril 2006 à 19:04:17

        Oui voila.Toi tu veu regarder nombre par nombre, donc utilise plutôt fgetc qui lira les caractéres un par un...
        • Partager sur Facebook
        • Partager sur Twitter
          20 avril 2006 à 19:05:59

          En fait, je fait mon propre type d'image :) ( en noir et blanc et en console, ch'ai pas si tu vois le truc :lol: ), quand il y a un 1 la console affiche un carré blanc, quand il y a un 0 elle affiche un espace et quand il y a un "@" elle va à la ligne

          Oki ? :)
          • Partager sur Facebook
          • Partager sur Twitter
            20 avril 2006 à 19:07:15

            Oui donc tu peux peux lire caractère par caractère puis faire un switch pour faire le printf associé.
            • Partager sur Facebook
            • Partager sur Twitter
              20 avril 2006 à 19:10:09

              OUI :) O.K.

              Dernière question, comment ouvrir un fichier sans connaître son nom ?
              comme :
              fichier = fopen("%s", "r");

              Je sais que ça ne focntionne pas comme ça, c'est pour faire une "image"


              Merci des réponses ^^
              • Partager sur Facebook
              • Partager sur Twitter
                20 avril 2006 à 19:12:57

                1. Tu utilises un scanf ou autre fgets pour demander à l'utilisateur le nom, puis tu fais un
                fopen(la_chaine,"r");

                2. tu peux utiliser les arguments du programme :
                int main (int argc , char * argv[])

                Si tu lances ton programme avec "monexe.exe monfichier" argc vaudra 2 et argv[1] aura le nom du fichier que tu veux.
                Tu pourras directement faire fopen(argv[1],"r") par exemple.
                • Partager sur Facebook
                • Partager sur Twitter
                  20 avril 2006 à 19:45:45

                  Merci Kayl :)

                  Mais qu'est ce que tu entends par "la_chaine" :
                  fopen(la_chaine,"r");

                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 avril 2006 à 19:48:06

                    char la_chaine [255];
                    fgets(la_chaine,sizeof la_chaine,stdin);
                    fopen(la_chaine,"r");
                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 avril 2006 à 19:49:48

                      Ah, OK
                      Merci :)

                      Un tout dernier petit truc :


                      Comment faire pour afficher la_chaine dans une MessageBox ?
                      MessageBox (0, "Impossible de charger la_chaine !\n", "PGPFEdit", MB_ICONERROR);



                      Merci
                      • Partager sur Facebook
                      • Partager sur Twitter
                        20 avril 2006 à 20:04:41

                        Citation : PianoPâriss

                        J'ai un problème avec fscanf ( enfin ce n'est pas fscanf qui pose le problème ):

                        Voici le fichier externe :

                        {[PGPF]1101011@0111011@0011010@0101101@1001101@0010001@1001101}


                        Je voudrais que dès qu'il y a un '1' l'ordi fasse qq chose, quand il y a un '0' il fasse autre chose et quand il y a un '@' il aille à la ligne


                        Tu lis avec fgets(), puis, pour identidier la ligne, tu cherches "[PGPF]" (strstr()). Si tu le trouves, tu parcours le reste caractères par caractères. Avec un switch-case, tu exécutes la bonne action...
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Music only !
                          20 avril 2006 à 20:13:46

                          O.K. Merci tout le monde ( surtout Kayl et -ed- :D )


                          Mais pour :
                          Afficher la_chaine dans une MessageBox ?
                          MessageBox (0, "Impossible de charger la_chaine !\n", "PGPFEdit", MB_ICONERROR);


                          Je fais comment ?


                          [EDIT] PROBLEME !!!!! o_O :

                            long nombreFichier = 0 ;
                            int caractereLu = 0 ;
                            char fichierOuvrir [150] ;
                           
                             
                          printf("\n\t   Bonjour, bienvenu(e) dans 'PGPFEdit' \n\nVotre fichier PGP doit se trouver dans le m%cme r%cpertoire que 'PGP.exe'\n\n", e_c, e_a);   
                               
                               printf("Veuillez entrer le nom du fichier PGP %c charcher\n\n",a_g);
                               FILE* fichierPGP = NULL ;
                               fgets(fichierOuvrir,sizeof fichierOuvrir,stdin);
                               fichierPGP = fopen(fichierOuvrir,"r");
                             
                               if(fichierPGP == NULL)
                               {             
                               MessageBox (0, "Impossible de charger le fichier renseigné !\n", "PGPFEdit", MB_ICONERROR);     
                               return EXIT_FAILURE ;                 
                               }

                          Il me dit tout le temps que le fichier est introuvable !!!! o_O

                          Pourquoi ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 avril 2006 à 20:38:10

                            As-tu pensé à taper l'extension ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              20 avril 2006 à 21:10:06

                              le 0 qui te manque EST le 15e caractere !!!
                              Il faud indiquer "fseek(fichierPGP,14, SEEK_SET);"
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Problème "fscanf" ?

                              × 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