# xCode et la librairie fstream c++ URGENT



## frankladen (30 Octobre 2010)

Je suis actuellement en informatique au cégep,

Durant les cours, nous utilisons visual studio 2010 pour la programmation c++, mais pour ma part j'utilise xCode pour faire mes travaux sur mon mac.

Notre professeur nous a donner un travail dans lequel il faut, entre autre, lire un fichier texte ligne par ligne. Après nous avoir expliqué les rudiments de la bibliothèque fstream il nous donne cette extrait de code en tant que base pour le reste du travail :


```
//Cours: Structures de données
//Professeur: Paul Cosmulescu
//Chapitre: Listes
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
/******************************************************************************/
//Déclaration d'une structure qui contient les informations stockées dans la liste
struct Personne_s
{
string NomPre;
char Sexe ;
float Taille, Poids ;
};
/******************************************************************************/
//Déclaration d'un élément (noeud) de liste
struct Element
{
Personne_s Pers ;
Element *Suivant ;
};
/******************************************************************************/
//Déclaration de la fonction de création de la liste à partir du fichier texte
void LireCreerFIFO(void);
//Les variables globales
Element *LaListe;
int N = 0;
/******************************************************************************/
int main(void)
{
	LireCreerFIFO();
	return 0;
}
/******************************************************************************/
void LireCreerFIFO(void)
{
Element *Tempo;
LaListe=NULL;//Création d'une liste vide
	
fstream A_Lire;
A_Lire.open("/Users/Francois/Documents/Donnees.txt", ios::in);//Ouverture du fichier texte en lecture
while(!A_Lire.eof())
{
//Allocation dynamique de la mémoire
Tempo=new(Element);
			
getline(A_Lire, Tempo->Pers.NomPre);
A_Lire >> Tempo->Pers.Sexe >> Tempo->Pers.Taille >> Tempo->Pers.Poids;
A_Lire.ignore();
N++;
cout << "\n" << Tempo->Pers.NomPre;
cout <<"\n"<<"Sexe "<<Tempo->Pers.Sexe<<"\t"<<"Taille "<<Tempo->Pers.Taille<<" m";
cout <<"\t"<<"Poids "<<Tempo->Pers.Poids<<" Kg";
			

}
A_Lire.close();
cout << "\nIl y a " << N << " personnes dans le fichier\n";
	
}
```

Lorsque j'exécute ce code sur visual studio, il m'affiche le contenu du fichier. Mais lorsque j'exécute ce code sur Xcode, le programme "tombe" dans une boucle infini.... 

Ce programme étant spécifique au mac, je suspecte qu'il provient de xCode ou de mac os x en lui meme..

J'utilise xCode v3.2.2 et suis sous mac OS 10.6

Je ne sais plus quoi faire, Aidez moi !!

PS. Oui j'ai penser a modifier le chemin du fichier entre mon mac et l'ordinateur de l'école 
Si votre réponse nécessite de modifier un certain paramètre dans xcode, s'il vous plaît, expliquer moi la démarche en 
détail car je ne suis pas encore très à l'aise avec ce logiciel.

Merci !


----------



## ntx (30 Octobre 2010)

Une question bête à deux balles : ton fichier de données vient de Windows ? As-tu pensé à vérifier les fins de lignes ? Sur Windows/DOS : \r\n et sut UNIX : \n  Si c'est le cas, tu peux convertir ton fichier avec l'outil dos2unix.

Du moment que tu n'utilises pas de librairies externes, le C/C++ est le même sur toutes le plate-formes et il n'y a pas de raison qu'un programme marche sur Windows et pas sur Mac OSX. Et Xcode n'a rien à voir la dedans.

Et pour finir : quelle horreur ce nommage façon M$. Les noms de classes et structure doivent commencer par des majuscules, les noms des membres des classes (fonctions et attributs) commence par une minuscule, et il n'y a pas de '_' entre les mots.


----------



## chombier (30 Octobre 2010)

frankladen a dit:


> Lorsque j'exécute ce code sur visual studio, il m'affiche le contenu du fichier. Mais lorsque j'exécute ce code sur Xcode, le programme "tombe" dans une boucle infini....


Utilise A_Lire.good() à la place de !A_Lire.eof()
Si le fichier n'est pas correctement ouvert, eof n'est pas positionné.

http://www.cplusplus.com/reference/iostream/ifstream/open/


----------



## frankladen (30 Octobre 2010)

MERCI NTX !!!!!!

C'était en effet le problème ici 

Mon Dieu quel soulagement je commençais à penser que je devrais tout faire mon projet sur visual studio au Cégep....

Un gros MERCI!!


----------



## tatouille (13 Novembre 2010)

```
#include <string>
#include <fstream>
#include<vector>

namespace PaulCosmulescu
{
    struct Person
    {
        Person() : name("John Doe"), sex('M'), heigth(1.83f), weigth(64.3f) {}
        std::string name;
        char sex;
        float heigth; // why float ?
        float weigth; // why float ? choose the base unit to represent the data otherwise silly
    };
    void MakeFIFO(std::string &filepath, std::vector<PaulCosmulescu::Person> &persons);
}

void PaulCosmulescu::MakeFIFO(std::string &filepath, std::vector<PaulCosmulescu::Person> &persons)
{
    std::fstream filestr;
    filestr.open(filepath.c_str(), std::fstream::in);
    while(!filestr.eof())
    {
        // Person m;
        m.name =;
        ....
        // persons.push_back(m);
    }
    filestr.close();
}

int main(int argc, char **argv) // new standard won't allow a main without args
{
    std::string path = "toto.txt";
    std::vector<PaulCosmulescu::Person> persons;

    PaulCosmulescu::MakeFIFO(path, persons);

// std iterator on the vector then print it if you want
    return 0;
}

/* EOF */
```
NULL n'existe pas en C++ pointer *p = 0;
symbol(void) n'existe pas en C++
quand tu referes a un symbol appartenant au global namespace 

::usleep(300);


----------

