mp

L'auteur de ce sujet a trouvé une solution à son problème.
Staff

Salut,

quand je veux rechercher si le verbe entré pas l'utilisateur existe dans ce fichier txt à laide de code blocks, la fonction fgets ne fonctionne pas bien car elle lit juste un mot.

kamelkimo700

« In code, we trust ». ;)

Édité par Taurre

+0 -1

Tu peux par exemple t'arranger pour avoir ton fichier constamment trié. Dès lors, tu utilises fgets (qui ne récupère pas du tout un mot mais le nombre d'octets que tu lui demandes s'il ne trouve pas de retour à la ligne ou EOF) et tu compares.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LONGUEUR_MAX_MOT 50

void conjuguer(char *);

int main(void)
{
    char verbe[] = "croitre";
    int continuer_recherche = 1;
    char mot[LONGUEUR_MAX_MOT];
    FILE *irreguliers = fopen("irreguliers.txt", "r");
    if(irreguliers == NULL)
        return EXIT_FAILURE;
    while((fgets(mot, LONGUEUR_MAX_MOT, irreguliers)) != NULL && continuer_recherche)
    {
        mot[strlen(mot)-1] = '\0';
        int comp = strcmp(verbe, mot);
        if(comp == 0)
            conjuguer(mot);
        continuer_recherche = !(comp < 0);
    }
    fclose(irreguliers);
    return EXIT_SUCCESS;
}

Le hasard n'est que le nom donné à notre ignorance et n'existerait pas pour un être ominscient., Émile Borel

+0 -0
Staff
1
mot[strlen(mot)-1] = '\0';

Juste pour dire, cette solution pose problème dans le cas où une ligne n'est pas terminée par une fin de ligne (c'est possible pour la dernière ligne d'un fichier) puisque tu supprimes un caractère composant cette dernière. Il est préférable de recourir à la fonction strchr() pour détecter et éventuellement supprimer un caractère \n.

1
2
3
4
char *nl = strchr(mot, '\n');

if (nl != NULL)
        *nl = '\0';
+0 -0

Yep, j'ai supposé que 50 caractères étaient suffisants pour stocker un verbe dans ma solution et que le fichier était bien encodé. Mais Taurre a tout à fait raison.

Le hasard n'est que le nom donné à notre ignorance et n'existerait pas pour un être ominscient., Émile Borel

+0 -0

Je suppose donc que tu affiches tes messages dans la console par défaut de Windows. Dans ce cas, il n'est possible (du moins, j'en doute) d'afficher des caractères en gras dans la console grâce à bibliothèque standard du langage C.

Il reste toutefois possible de changer la couleur des caractères pour mettre des mots en évidence, mais toujours pas avec la bibliothèque standard. Tu peux jeter un coup d’œil à la petite bibliothèque conio.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte