mwoua3
Messages postés5Date d'inscriptiondimanche 3 mai 2009StatutMembreDernière intervention 4 mai 2011
-
4 mai 2011 à 00:03
ismail22425
Messages postés3Date d'inscriptionlundi 8 août 2011StatutMembreDernière intervention 8 août 2011
-
9 mai 2011 à 15:44
Bonjour,
J'ai un gros problème. Dans le cadre d'un projet d'informatique, je fais appel à une fonction qui me permet de copier le contenu d'un fichier texte (un dictionnaire, "dico.text") dans une matrice.
Le problème est que mon compilateur ne me renvoie aucune erreur lors de la compilation mais bien lors de l'exécution du programme. Le gros problème est aussi que je n'arrive pas à comprendre l'erreur faite !
- La première fonction, qui me donne la taille du dictionnaire devrait normalement être utilisée pour déterminer la dimension première de la matrice dicoList[longueur Dico] [TAILLE] . J'ai cru d'abord que le problème venait de là, et qu'il fallait une constante dans la première dimension. Mais même comme ça j'y arrive pas.
Cette fonction est correcte et fonctionne bien, je l'ai utilisée avant de faire intervenir la matrice dicoList et elle fonctionnait parfaitement bien...
- Les cout (au message parfois douteux) sont uniquement là pour voir où le programme s'est arrêté de fonctionner... Il s'avère qu'aucun cout (même le premier du main !) ne fonctionne...
Je sais que le code est un peu long mais une aide serait la bienvenue, et ceci le plus rapidement possible !
Merci à tous.
PS : désolé de l'indentation.. Il est possible que le copier coller ne fonctionne pas bien :/
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 4 mai 2011 à 10:22
Ça plante parce que la taille de TAILLE est trop grande... (Diminue là et ça passera).
J'ai beaucoup de remarques à faire:
- Évite les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace - #include ne finit pas par un ";"
- Vérifie la réussite de l'ouverture du fichier avec un: "if (!dico) { std::cerr << "Error" << std::endl; return 0; }"
- while(!dico.eof()) => while(dico)
- N'utilise pas de tab[][], utilise du C++, c'est-à-dire: std::vector ou std::list, dont la taille est dynamique.
- Idem pour le chaîne de caractères, à la place de char* ou de char[], utilise std::string.
- "return 0" à ajouter à la fin du main.
Que contient dico.txt ?
Si c'est juste des mots, il te faut un std::vector<std::string> ou un std::list<std::string>. (Ça te prendra 3 lignes à faire :p).
PS: Tu as une balise code dans le forum, pour présenter le code correctement.
________________________________________________________________________
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
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 4 mai 2011 à 10:30
Comme c'est ultra simple, je te propose même une version:
#include
#include <fstream>
#include <vector>
typedef std::vector<std::string>::const_iterator iter;
bool loadDico(const std::string& filename, std::vector<std::string>& dico)
{
std::ifstream file(filename.c_str());
if (!file)
return false;
std::string word;
while (file >> word)
dico.push_back(word);
return true;
}
int main()
{
std::vector<std::string> dico;
if (!loadDico("dico.txt", dico))
{
std::cerr << "Unable to load file" << std::endl;
return 1;
}
// Inutile, juste pour information
std::vector<std::string> dicoCopy;
dicoCopy dico; // Pas besoin de dicoCopy(dicoList); Juste un à faire :)
// Iteration
std::cout << "Methode 1" << std::endl;
for (iter it = dico.begin(); it != dico.end(); ++it)
std::cout << *it << std::endl;
// Autre méthode, moins bien ! Fonctionne pour std::vector,
// mais pas les autres commme std::list...
std::cout << "Methode 2" << std::endl;
for (size_t i = 0; i < dico.size(); ++i)
std::cout << dico[i] << std::endl;
return 0;
}
________________________________________________________________________
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
mwoua3
Messages postés5Date d'inscriptiondimanche 3 mai 2009StatutMembreDernière intervention 4 mai 2011 4 mai 2011 à 20:10
Ah ! Merci bcp :)
Le truc c'est que justement, ils veulent pas qu'on utilise d'autres bibliothèques (j'sais même pas si ça s'appelle comme ça) que les 4 reprises ci-dessus.
Ils veulent aussi qu'on présente absolument notre code de cette manière là, avec des Mat[][] et des Vect[]
De la même manière,
"
mwoua3
Messages postés5Date d'inscriptiondimanche 3 mai 2009StatutMembreDernière intervention 4 mai 2011 4 mai 2011 à 21:19
Ah tiens, j'ai une question :
Mnt ça fonctionne, mais il m'affiche (surtout à la fin) parfois des caractères bizarres :
Z Y K L O N S
Z Y M A S E
Z Y M A S E S
Z Y M O T E C H N I E _ ?
Z Y M O T E C H N I E S
Z Y M O T I Q U E ? ? _ ?
Z Y M O T I Q U E S ? p ?
Z Y T H O N
Z Y T H O N S
Z Y T H U M
Z Y T H U M S
A quoi pourrait être dû ceci ? Ils ne sont pas présents dans le fichier dico.txt... Et jusqu'à la lettre Z y a aucun problème...
ismail22425
Messages postés3Date d'inscriptionlundi 8 août 2011StatutMembreDernière intervention 8 août 2011 9 mai 2011 à 15:44
bonour les amis !
quelque peut m'aidé j'ai le meme problème que " mwoua3" sous ns2.34 j'ai develloper une nouveau module sous l'unix avec C++ quant je compile sa marche bien mais quand je lance l'execution a partir de script tcl
il m'affche un erreur fault segmentation???