Concernant ton problème, il vient du contrôle de validité de ton flux.
while(f) // << au dernier tour, le flux est encore valide
{
using std::cout;
using std::endl;
f >> entite; /* << on tombe sur eof, le flux devient invalide,
rien n'est écrit dans entite */
f >> user; /* toujours invalide, rien n'est écrit dans user */
f >> pass; /* toujours invalide, rien n'est écrit dans pass */
/*
affichage, le flux ayant été invalidé pendant la boucle, les
variables entite, user et pass, n'ont pas été modifiées...
*/
cout << entite << " " << user << " " << pass << endl;
}
Pour avoir quelque chose de beaucoup plus propre, il faut structurer plus et respecter strictement le principe de responsabilité unique(SRP). Le principe de responsabilité unique dit qu'on ne doit confier qu'une seule tâche à un objet d'un programme, sinon ça devient trop compliqué pour nos petite têtes.
Ta fonction fait 2 choses, lire le fichier et afficher son contenu. C'est trop compliqué, la preuve tu n'y arrive pas Pour que ce soit plus facile, il faudrait faire 2 fonctions, une qui lit le fichier et une qui affiche son contenu. Comment faire ça? en structurant:
Ici nous voyons que ta donnée de base est un groupe de 3 chaînes de caractères, chaque châine ayant une fonction bien définie, l'idée naturelle va être de les regrouper dans une structure, c'est à dire créer un nouveau type de donnée spécialement conçu pour contenir 3 chaînes de caractères:
Et l'affichage sera une autre fonction qui affiche un UserList
void print(UserList const & list);
Découpons encore un peu la lecture dans un fichier, en vertu de SRP, lire un UserList dans un fichier, c'est trop compliqué, par contre lire une ligne dans le fichier, ça on sait faire, pas de souci, il n'ous reste à faire une fonction qui va fabriquer un UserInfo à partir d'une ligne du fichier:
UserInfo construct(std::string const & fileLine);
Muni de cette fonction, ma fonction readUserList devient facile à écrire:
SRP: Single Resposability Principle (Principe de responsabilité unique), ça n'a strictement rien à voir avec l'héritage. C'est la formalisation d'un vieil adage de bon sens populaire que l'on peut traduire par "Je ne sais faire qu'une seule chose, mais je la fais bien" ou par le plus ambigü "Diviser pour règner".
L'idée c'est que tu dois découper ton programme en tâches les plus simple possibles, typiquement une tâche simple = une fonction. Pour construire un programme, tu assembles tes tâches simples à la manière d'un légo, pour construire des tâches de plus en plus complexes. Après SRP ne s'applique pas seulement aux fonctions, c'est aussi un des piliers fondamentaux de la programmation orientée objet et l'idée reste la même, toujours découper pour obtenir des trucs hyper simples, hyper compact, facile à construire, facile à debugger, facile à corriger si par malchance on a réussi a se tromper (mais plus c'est simple, moins on risque de se tromper, c'est une stratégie où on gagne pratiquement à tous les coups).
Concernant le cours de C++ d'Open Classroom, je te conseille d'en changer. Il est complètement dépassé, et contient en plus un paquet d'âneries. En ligne, tu as le cours de gbdivers qui bien que pas fini, est à peu près à jour et surtout ne contient presque pas de bêtises (ou alors elles sont bien planquées ). En bouquin, tu as le C++ Primer de Stanley Lipmann qui bien que commançant un peu à dater, reste à ma connaissance, le meilleur cours sur C++ disponible. Naturellement le Primer n'existe qu'en anglais, mais ce n'est pas un problème, parce que si tu veux espérer être un jour capable de faire quoi que ce soit en programmation, la maîtrise de l'anglais est un pré-requis indispensable.
× 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.
Étudiant en informatique en année de césure
Étudiant en informatique en année de césure
Étudiant en informatique en année de césure