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) ?
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
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 "";
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
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
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".
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.
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 ?
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.
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);