mornaloce
Messages postés51Date d'inscriptionlundi 17 mars 2008StatutMembreDernière intervention21 mars 2014
-
18 nov. 2010 à 16:51
BunoCS
Messages postés15371Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention 2 juin 2023
-
28 déc. 2010 à 09:30
Bonjour à tous. Voilà je vous explique mon problème. J'aimerais faire un petit programme qui permet de récupérer un mot aléatoirement dans un fichier texte puis de demander à l'utilisateur si ce mot est féminin ou masculin (réponse qui sera au préalable inscrite aussi dans le fichier texte). Ma question est donc : comment récupérer un mot aléatoirement (ou plus précisément une ligne de mon fichier texte) ?
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023124 18 nov. 2010 à 17:10
Pour récupérer une ligne dans un fichier texte, tu peux utiliser "fgetline".
"srand" te permet d'initialiser le générateur de nombre aléatoire (à n'appeler qu'une seul fois au début de ton main), et "rand" te permet d'obtenir un nombre aléatoire.
A partir de ces 3 informations, il devrait être aisé pour toi de réaliser ce que tu veux. Si tu es bloqué, poste ton code pour qu'on le corrige/améliore.
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
mornaloce
Messages postés51Date d'inscriptionlundi 17 mars 2008StatutMembreDernière intervention21 mars 20142 20 déc. 2010 à 19:53
Désolé de ne répondre que maintenant mais j'avais d'autre trucs à faire récemment donc j'avais un peu laisser tomber ce projet.
Merci de ta réponse CptPingu. J'ai essayé d'utiliser ta fonction mais j'ai pas réussi à l'utilisé correctement. Je met mon code pour que ce soit plus simple.
Main :
int main()
{
char mot;
char ligne;
int position_espace;
ligne = chargerMot();
//position_espace = strrpos(ligne, " ");
printf(mot + "\n");
return 0;
}
Fonction chargerMot:
char chargerMot()
{
FILE* fichier = NULL;
int ligne;
int i = 0;
char mot;
srand(time(NULL));
ligne = rand();
//chiffre pris au hasard par l'ordinateur
//ligne = 2;
fichier = fopen("listeMot.txt", "r");
if (fichier == NULL)
return "";
mornaloce
Messages postés51Date d'inscriptionlundi 17 mars 2008StatutMembreDernière intervention21 mars 20142 21 déc. 2010 à 15:58
Apparemment non ça ne renvoie pas une valeur entre 0 et 1 mais ça peut renvoyer n'importe quoi donc il faut quand même que je le limite au nombres de lignes qu'il y a dans mon fichier, tu saurais comment faire ?
Sinon à part ça quand je compile mon code ça me renvoie des erreurs sur le fgetln.
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
mornaloce
Messages postés51Date d'inscriptionlundi 17 mars 2008StatutMembreDernière intervention21 mars 20142 21 déc. 2010 à 18:31
Merci pour l'info CptPingu. J'ai réussi (enfin je pense) à utiliser le rand comme je le voulais. mais j'ai toujours une ereur sur la fonction que tu m'a proposé,soit : fgetln ou fgetline c'est pareil. En fait ce n'est pas reconnus par mon IDE car les deux fonctions ci dessus ne sont pas intégrées dans mon stdio.h
Je me suis donc rabattu sur la fonction fgets mais je n'arrive pas bien à comprendre comment l'utiliser, pourrais-tu me renseigner ?
Voilà mon code modifier pour la fonction chargerMot():
char chargerMot()
{
FILE* fichier = NULL;
int ligne = 0;
int i = 0;
int j = 0;
char mot = NULL;
int nb_ligne = 0;
int c = 0;
char recup = NULL;
srand(time(NULL));
fichier = fopen("listeMot.txt", "r");
if (fichier == NULL)
return NULL;
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
mornaloce
Messages postés51Date d'inscriptionlundi 17 mars 2008StatutMembreDernière intervention21 mars 20142 23 déc. 2010 à 12:27
Oui j'ai utilisé fgets() justement buno. Mais je n'arrive pas à l'utiliser comme il faut, comme tu peux le voir dans mon code, malgré être allé voir sur certain sites. Donc j'aurais aimé savoir comment l'utilisé correctement afin de récupéré la valeur de ma ligne du fichier texte dans ma variable "mot".
mornaloce
Messages postés51Date d'inscriptionlundi 17 mars 2008StatutMembreDernière intervention21 mars 20142 24 déc. 2010 à 12:30
Bizarre j'ai fait la même chose mise à part pour la gestion de l'erreur puisque moi je renvoie null s'il y a une erreur mais pourtant ça ne fonctionne pas. La fonction fgets ne récupère rien dans mon fichier. La console m'affiche une ligne vide. Et ce n'est pas parce qu'il y a un erreur à l'ouverture du fichier car j'ai suivi la progression en mode debbug et l'ouverture du fichier se passe très bien.
mornaloce
Messages postés51Date d'inscriptionlundi 17 mars 2008StatutMembreDernière intervention21 mars 20142 24 déc. 2010 à 14:59
C'est bon j'ai réussi à m'en sortir finalement. Donc maintenant je récupère une chaine de caractère du style "chat m". Je souhaiterais en sortir deux chaines différentes coupées au niveau de l'espace. C'est à dire : str 1 = "chat" et str 2 = "m". Pour récupérer la position de l'espace je voulais utiliser strrpos() puis substr() pour récupérer mes deux nouvelles chaines mais ces fonctions ne sont pas disponibles dans mon "string.h". Quelles autres fonctions pourrais-je utiliser pour arriver au résultat voulu ?
mornaloce
Messages postés51Date d'inscriptionlundi 17 mars 2008StatutMembreDernière intervention21 mars 20142 24 déc. 2010 à 15:30
Bon j'ai fini par trouver la fonction strtok(). Le problème c'est qu'elle stocke bien ce que je veux mais elle ne me renvoie pas la valeur comme il faut. Je m'explique, voilà mon code :
char ligneRecup[100] = {0};
char tabChaine[] = {0};
char *pch = NULL;
int i = 0;
//On recupère la ligne. Ex : "chat m"
if(!chargerMot(ligneRecup))
exit(0);
//pch prend lavaleur "chat"
pch = strtok (ligneRecup," ");
while (pch != NULL)
{
//tabChaine prend la valeur "1/2" ???
tabChaine[i] = pch;
//pch prend la valeur "m"
pch = strtok (NULL, " ");
i ++;
}
Je tiens à préciser que j'ai vérifier que les variables prenaient bien les valeurs en commentaires. Ce n'est pas juste une supposition.
mornaloce
Messages postés51Date d'inscriptionlundi 17 mars 2008StatutMembreDernière intervention21 mars 20142 27 déc. 2010 à 14:03
En fait je comptais récupérer les valeurs "chat" dans tabChaine[0] et "m" dans tabChaine[1]. J'ai viré ça et essayer de faire de ta manière mais ça me renvoie des erreur. J'ai fait ça :
int main()
{
char ligneRecup[100] = {0};
char *genreDuMot = NULL;
char lettre = NULL;
char *pch = NULL;
if(!chargerMot(ligneRecup))
exit(0);
pch = strtok (ligneRecup," ");
printf("Voici le mot : %s", pch);