Lecture fichier C++
juju
-
azzeddine -
azzeddine -
Bonjour,
je fais du C/C++ sur linux
Je souhaiterai faire une fonction qui me permet de lire un fichier au format nom_joueur.txt que j'ai sauvegardé avant.
j'effectue en commande :
strcat (joueur1.nom, ".txt");
j'ai donc dans joueur.nom : Toto.txt (si le nom du joueur est toto!)
J'ai verifié j'ai bien dans mon dossier ce fichier.
Je souhaite donc ouvrir ce fichier en faisant :
ifstream lecture (joueur1.nom);
Quand je compile : erreur de segmentation!
J'ai vérifié en faisant des tests le probleme est qu'il ne lit pas du tout le fichier.
Comment faire?Merci
je fais du C/C++ sur linux
Je souhaiterai faire une fonction qui me permet de lire un fichier au format nom_joueur.txt que j'ai sauvegardé avant.
j'effectue en commande :
strcat (joueur1.nom, ".txt");
j'ai donc dans joueur.nom : Toto.txt (si le nom du joueur est toto!)
J'ai verifié j'ai bien dans mon dossier ce fichier.
Je souhaite donc ouvrir ce fichier en faisant :
ifstream lecture (joueur1.nom);
Quand je compile : erreur de segmentation!
J'ai vérifié en faisant des tests le probleme est qu'il ne lit pas du tout le fichier.
Comment faire?Merci
A voir également:
- Lecture fichier C++
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
4 réponses
à la place de cerr, tu peu mettre perror().
compile avec l'option de debug (-g je croi)
puis lance ton programme avec gdb :
gdb *.exe
run
il te dira où est exactement ton erreur de segmentation.
iflect>>type;//lit le type
peut être source d'erreur, car 'type' est de type char, donc il faut que dans ton fichier la premiere donné soit un carctère unique.
compile avec l'option de debug (-g je croi)
puis lance ton programme avec gdb :
gdb *.exe
run
il te dira où est exactement ton erreur de segmentation.
iflect>>type;//lit le type
peut être source d'erreur, car 'type' est de type char, donc il faut que dans ton fichier la premiere donné soit un carctère unique.
Salut.
quel est le type de joueur1.nom ?
fait une sortie de joueur1.nom voir si il est bien modifier.
Tu fait du C++, donc autant utiliser <string> de la STL.
string joueur1.nom;//tu met le type string à nom
donc ensuite,
fstream lecture((jouer1.nom+".txt").c_str(),std::ios::in);
ensuite, fait une sortie de lecture, vérifier qu'il n'est pas nul (que l'ouverture a bien fonctionner)
de la façon suivante :
if (!lecture) cerr<<"pb d'ouverture\n";// technique vue l à : https://en.cppreference.com/w/cpp/io/basic_fstream/open
bonne chance
quel est le type de joueur1.nom ?
fait une sortie de joueur1.nom voir si il est bien modifier.
Tu fait du C++, donc autant utiliser <string> de la STL.
string joueur1.nom;//tu met le type string à nom
donc ensuite,
fstream lecture((jouer1.nom+".txt").c_str(),std::ios::in);
ensuite, fait une sortie de lecture, vérifier qu'il n'est pas nul (que l'ouverture a bien fonctionner)
de la façon suivante :
if (!lecture) cerr<<"pb d'ouverture\n";// technique vue l à : https://en.cppreference.com/w/cpp/io/basic_fstream/open
bonne chance
j'ai essayé mais ca ne marche pas non plus!
En fait je fais du C/C++ pas vraiment du C++ (pas vu cerr, str()...)
voici ma fonctionen entier :
void fonction (joueur joueur1)
{
char type, ligne, direction;
int colonne, nombre, i, t;
strcat (joueur1.nom, ".txt");
cout<<"fichier "<<joueur1.nom<<endl;
ifstream iflect (joueur1.nom);
for (i = 0; i<5; i++)
{
iflect>>type;//lit le type
cout<<"type "<<type;
iflect>>nombre;//lit le nombre de bateau de ce type
cout<<"nombre : "<<nombre;
while (nombre>0) //tant qu'il y a des bateaux
{
iflect>>ligne;
cout<<"ligne "<<ligne;
iflect>>colonne;
iflect>>direction;
//place le bateau
placer_bateau(ligne, colonne, direction, type, joueur1.mon_tab);
nombre--;
}
}
iflect.close();
}
typedef struct {
char nom[20];
char ** mon_tab;
char ** mes_tirs;
flotte flotte_adversaire;
} joueur;
En fait je fais du C/C++ pas vraiment du C++ (pas vu cerr, str()...)
voici ma fonctionen entier :
void fonction (joueur joueur1)
{
char type, ligne, direction;
int colonne, nombre, i, t;
strcat (joueur1.nom, ".txt");
cout<<"fichier "<<joueur1.nom<<endl;
ifstream iflect (joueur1.nom);
for (i = 0; i<5; i++)
{
iflect>>type;//lit le type
cout<<"type "<<type;
iflect>>nombre;//lit le nombre de bateau de ce type
cout<<"nombre : "<<nombre;
while (nombre>0) //tant qu'il y a des bateaux
{
iflect>>ligne;
cout<<"ligne "<<ligne;
iflect>>colonne;
iflect>>direction;
//place le bateau
placer_bateau(ligne, colonne, direction, type, joueur1.mon_tab);
nombre--;
}
}
iflect.close();
}
typedef struct {
char nom[20];
char ** mon_tab;
char ** mes_tirs;
flotte flotte_adversaire;
} joueur;