Bonsoir,
je dois lire des entiers un par un a partir d'un fichier texte de n+2 lignes.
(pour les utiliser ensuite dans une structure)
-la première et la deuxième ligne contiennent 2 entiers
-pour les n lignes suivantes je dois lire jusqu'à la fin de la ligne.
J'ai codé ceci (le code fonctionne, mais j'ai besoin d'une façon plus optimale pour effectuer la lecture des entiers):
Graphe *ajoutGrapheTexte(int &s_depart, int &s_arrivee)
{
char a, b, c, d, stTemp[2];
int t;
Graphe *G = initGraphe();
Sommet *S = initSommet();
Successeur *Su = initSuccesseur();
std::ifstream monFichier("monFichier.txt");
if (!monFichier.is_open()) std::cout << "Impossible d'ouvrir le fichier en lecture !" << std::endl;
else
{
//Lecture de la première ligne:
for(int i(0); i<1; i++)
{
monFichier >> a >> b;
sprintf(stTemp,"%c",a);
G->n = atoi(stTemp);
sprintf(stTemp,"%c",b);
G->m = atoi(stTemp);
}
for(int i(1); i<2; i++)
{
monFichier >> a >> b;
sprintf(stTemp,"%c",a);
s_depart = atoi(stTemp);
sprintf(stTemp,"%c",b);
s_arrivee = atoi(stTemp);
}
//Lecture des n lignes restantes:
for(int i(2); i<G->n+2; i++)
{
monFichier >> a >> b >> c >> d;
sprintf(stTemp,"%c",a);
t = atoi(stTemp);
sprintf(stTemp,"%c",b);
Su = ajoutSuccesseur(Su, atoi(stTemp), 1);
if(c != '#') //Je n'ai pas trouvé de meilleur façon pour stopper la lecture a la fin de la ligne.
{
sprintf(stTemp,"%c",c);
Su = ajoutSuccesseur(Su, atoi(stTemp), 1);
if(d != '#') //idem
{
sprintf(stTemp,"%c",d);
Su = ajoutSuccesseur(Su, atoi(stTemp), 1);
}
}
S = ajoutSommet(S, Su, t);
if(i 2) G->tete S;
Su = initSuccesseur();
}
}
monFichier.close();
return G;
}
Je ne sais pas pourquoi tu dois mettre des '#' partout, mais tu peux très bien utiliser "fichier >> entier" directement au lieu de "fichier >> caractère, puis conversion en entier"
Soit le fichier suivant:
99
4
13
102
215
306
47
528
637
7468
857
Pour le lire proprement, j'utiliserais:
#include
#include <fstream>
void readFile(const std::string& filename)
{
std::ifstream file(filename.c_str());
if (!file)
{
std::cout << "Impossible d'ouvrir le fichier en lecture !" << std::endl;
return;
}
int t;
while (file >> t)
std::cout << t << std::endl;
}
int main()
{
readFile("monFichier.txt");
return 0;
}
J'ai retiré la logique de graphe, puisque ici, ton souci se trouve au niveau de la lecture de fichier.
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Tu n'as pas besoin de détecter les sauts de ligne. Le code donné, le fait tout seul.
En revanche, si tu veux vraiment récupérer une ligne d'un fichier, tu as la fonction std::getline (voir la doc sur le net).
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question