Groupe : Membres
|
Bonjour bonjour.....
Voila, je me suis mis à l'écriture et à la lecture dans un fichier et j'ais fait ce code dans l'espoire de voir dans ma console les chiffres 0123456789 s'afficher.
Mais il affiche 9045232
Et je ne vois pas pourkoi, vous voyez le probleme vous ?
Code : C++#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int a;
int b;
fstream fichier;
fichier.open("test.txt",ios::in | ios::out | ios::trunc );
for( a=0 ; a <= 10 ; a++)
{
fichier << a <<endl ;
}
for( a=0 ; a <= 10 ; a++)
{
fichier >> b ;
cout << b ;
}
system("PAUSE");
return EXIT_SUCCESS;
}
|
Geek un jour, geek toujours !
 Groupe : Membres
|
fstream t'ouvre un fichier en lecture/ecriture.
Une fois que tu as écrit tes valeurs , il faut revenir au début du fichier pour les lire.
|
The cake is a lie!
 Groupe : Membres
|
1) la boucle de lecture n'est pas bonne, va sur developpez.com : http://c.developpez.com/faq/cpp/?page=fichiers
2) n'oublie pas de fermer ton fichier.
3) lors de la lecture ton pointeur est à la ffin du fichier... impossible à lire à partir de la fin. Il faut donc fermer ton fichier en écriture et le réouvrir en lecture (et le refermer)
4) si tu veux lire/écrire de 0 à 9 il va falloir arrêter ta boucle d'écriture AVANT 10
Voici ma solution, ne la regarde que si tu es complètement perdu, amuses-toi à trouver ta propre solution :
Secret (cliquez pour afficher)Code : C++#include <iostream>
#include <fstream>
using namespace std;
int main()
{
fstream fichier;
fichier.open( "test.txt", ios::out | ios::trunc );
for( int ecrit = 0 ; ecrit < 10 ; ecrit++)
{
fichier << ecrit <<endl ;
}
fichier.close();
fichier.open( "test.txt", ios::in );
int lect = 0;
while( fichier >> lect )
{
cout << lect << endl;
}
fichier.close();
system( "PAUSE" );
return 0;
}
Édité
le 19/06/2007 à 18:31:10
par MatteX
|
Geek un jour, geek toujours !
 Groupe : Membres
|
Sa boucle de lecture peut être bonne s'il veut ne lire que les 10 1er caractère et s'il y en d'autre apres.
Pour l'histoire de close , n'est il pas appelé dans tout les cas dans le destructeur ?
|
Groupe : Membres
|
OK OK
Merci beaucoup MatteX et Davidbrcz
Neanmoins, je ne comprend pas le :
Code : C++while( fichier >> lect )
|
Groupe : Membres
|
Citation : Davidbrcza- Sa boucle de lecture peut être bonne s'il veut ne lire que les 10 1er caractère et s'il y en d'autre apres.
b- Pour l'histoire de close , n'est il pas appelé dans tout les cas dans le destructeur ?
a- s'il ne teste pas le résultat de chacune de ses lectures, la boucle n'a aucune chance d'être bonne. D'ailleurs s'il avait testé, il aurait vu quand cela n'allait pas.
b- si
@bigadin, MatteX a donné le lien qui contient tout ce qu'il faut pour décrypter cette incantation.
PS: pas besoin de réouvrir si le fichier est ouvert en lecture+ecriture. Toutefois, il peut être nécessaire de faire un seekg et éventuellement un clear, j'avoue n'avoir pratiquement jamais de fichiers en L+E.
|