LeaIUT
Messages postés2Date d'inscriptiondimanche 27 mars 2011StatutMembreDernière intervention29 mars 2011
-
27 mars 2011 à 19:36
LeaIUT
Messages postés2Date d'inscriptiondimanche 27 mars 2011StatutMembreDernière intervention29 mars 2011
-
29 mars 2011 à 11:29
Bonsoir,
lors de l'execution de mon programme, une exception me stoppe la progression:
"terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr"
je voudrais savoir comment affecter chaque mot d'une chaine à une variable.
J'ai une fonction qui ouvre un fichier, le lit (ligne par ligne) et qui doit ensuite découper chaque ligne en mot, et affecter ces mots à une variable.
Le type "Evenement" est un enregistrement avec jour (int), heureDebut et heureFin (float) et abrege et description (string). La fonction doit ouvrir un fichier texte rédigé comme tel :
5 11 12 ARC Architecture_Rattrapage
3 17 18.5 CPT Comptabilite_Rattrapage
Je voudrais donc par exemple que 5 soit affecté à evenement.jour, 11 soit affecté à evenement.heureDebut etc...
ps: je teste la procédure sur un fichier ne contenant qu'une seule ligne pour le moment.
Le fichier texte est le suivant:
5 11 12 ARC Architecture_Rattrapage
Au resultat, le code nous affiche le résultat prévu (donc pas de problème jusque là) mais il y a quand même cette exception qui se lève.
Je ne comprends pas pourquoi, vu que je ne retire pas plus de caractères que ce que la chaine en contient.
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023124 28 mars 2011 à 10:46
J'allais oublier, si la forme de ton fichier est toujours la même, alors il y a bien plus simple:
while (f)
{
f >> e.jour >> e.heureDebut >> e.heureFin >> e.abrege >> e.description;
afficherEvenement(e);
}
________________________________________________________________________
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
L'erreur veut dire que tu sors des bornes de ta chaîne.
Ex qui provoque l'erreur:
#include <string>
int main()
{
std::string s = "coucou"; // Taille de 6
s.substr(10); // Lève une exception
return 0;
}
Donc avant de faire un substr(2,2) ou substr(5,2), regade déjà si "ligne" contient bien une chaine et si celle-ci a la bonne taille.
________________________________________________________________________
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