Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lecture de fichier

problème d'ouverture

Sujet résolu
    24 novembre 2005 à 14:53:36

    lu à tous

    Bon j'ai un problème en C++ je n'arrive pas à ouvrir un fichier texte correctement pour le lire
    Sachant que le .exe et le fichier sont dans le même dossier et que le fichier contient 42 (un Integer quoi :))

    Il n'y a aucun problème à la compilation, en revanche à l'execution ça marque impossible d'ouvrir et windows m'envoie un truc genre "puissance4.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru., envoyez le rapport d'erreur, ne pas envoyer"

    je sais que c'est un peu en avance sur les tutos mais si vous pouviez m'éclairer quand même ^^

    //affichage du high score d'un jeu de puissance 4.
    //ouverture de highScore.txt et lecture.
    #include <iostream>
    #include <fstream>
    #include <sstream>
    #include <stdlib.h>

    using namespace std;

    //ouverture du fichier highScore.txt
    ifstream* openFile()
    {
            ifstream* pHighScore = 0;

            // ouvre le fichier
            pHighScore = new ifstream("highScore.txt");
            if (pHighScore->good())
            {
                return pHighScore;
            }
            else{
                 cerr << "Impossible d'ouvrir " << endl;
                 delete pHighScore;
            }

        return 0;
    }

    int main(int nNumberofArgs, char* pszArgs[])
    {
       
        int nValue; 
        ifstream* pFileStream = openFile();

        //lecure du high score
        while (!pFileStream->eof())
        {
            // lit une valeur
            (*pFileStream) >> nValue;
           
            // echec de la lecture
            if (pFileStream->fail())
            {
                break;
            }
           
            // on naffiche le high score
            cout << "Le précédent HighScore est : " << nValue << endl << endl;
        }
       
        system("PAUSE");
        return 0;
    }


    voila
    ++
    • Partager sur Facebook
    • Partager sur Twitter
      24 novembre 2005 à 15:22:57

      Tu as oublié de tester que pFileStream n'est pas null avant d'appeler eof.

      --> Plantage.

      Attention, si tu utilises VC++, ton répertoire courant quand tu exécutes depuis l'ide n'est pas le répertoire de l'exe mais le répertoire du projet (un niveau au dessus par défaut).

      a+
      • Partager sur Facebook
      • Partager sur Twitter
        24 novembre 2005 à 15:50:39

        il te manque comme bibliotheque
        #include<stdio.h> pour que sa marche
        • Partager sur Facebook
        • Partager sur Twitter
          24 novembre 2005 à 20:01:58

          d'accord j'ai rajouté la librairie

          mais maintenant je rentre dans le
          if (pFileStream->fail())
          {
          break;
          }

          c'est assez rasant :(
          • Partager sur Facebook
          • Partager sur Twitter
            25 novembre 2005 à 7:15:17

            T'as quand même des trucs beaucoup plus simple pour ouvrir un fichier, comme open() (_open() sous Windows si je me rappelle bien) ou fopen().
            En passant, si dans le bloc notes ton nombre dans le fichier est 42, alors c'est pas un int que tu stockes mais deux caractères. Dans ce cas, après avoir lu tes caractères il faut utilisé atoi() pour le convertir en nombre.
            • Partager sur Facebook
            • Partager sur Twitter
              25 novembre 2005 à 7:23:29

              Citation : Pas de titre

              En passant, si dans le bloc notes ton nombre dans le fichier est 42, alors c'est pas un int que tu stockes mais deux caractères. Dans ce cas, après avoir lu tes caractères il faut utilisé atoi() pour le convertir en nombre.


              Non avec la lib standard, il peut aller chercher directement un nombre ;).
              Enfin tu as raison, avec le standard C c'est bcp plus facile :

              FILE* OpenFile(char* file){
              /* ouvre le fichier */
                  FILE* f = fopen(file,"r");
                  if(!f)cerr<<"Erreur à l'ouverture !!";
                  return f;
              }
              int GetNb(char* file)
              {
                 FILE* f = OpenFile(file);
                 if(!f)return -1;
                 int n = 0;
              /* récupère l'entier */
                 fscanf(f,"%d",&n);
                 fclose(f);
                 return n;
              }

              /* Maintenant plus qu'a appeler GetNb("file.txt";); */
              • Partager sur Facebook
              • Partager sur Twitter
                25 novembre 2005 à 7:38:46

                Il peut aller cherche un nombre stocké sous forme de chaine de caractères ? Ah je savais pas :)
                Moi j'ouvrais le fichier en mode binaire pour stocker des nombres, comme ça je me faisais pas chier avec atoi() :lol:
                • Partager sur Facebook
                • Partager sur Twitter
                  25 novembre 2005 à 7:41:17

                  Et tu programmes en assembleur aussi ? :lol:
                  • Partager sur Facebook
                  • Partager sur Twitter
                    25 novembre 2005 à 9:02:21

                    Sur un motorola 68000 ouais, à l'aise :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 novembre 2005 à 12:27:22

                      humbon je crois que le problème venait de mon fichier texte car le même code sur un fichier different marche très bien lol

                      Enfin merci en cas je vais utiliser le standard C comme vous dite :)

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Lecture de fichier

                      × 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