Comment lire une chaine de caractère en C? [Résolu/Fermé]

Signaler
Messages postés
5
Date d'inscription
mercredi 30 avril 2014
Statut
Membre
Dernière intervention
6 mai 2014
-
Messages postés
4242
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
-
Bonjour à tous,

Comme je l'ai dit dans le titre, j'aimerais savoir comment lire une chaine de caractère en C.
Je vous explique mon problème, j'ai écrit un programme qui lit des codes dans une base de données en CSV et qui les stocke dans un tableau de type char code.
Chaque code est composé de 4 caractères que j'aimerais comparer un par un à 4 autres variables de type char rentrés par l'utilisateur.

Pourriez-vous m'aider?

Merci.

3 réponses

Messages postés
4242
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
192
salut,

Pour avoir une chaine de caractère en c, c'est un tableau (de caractères). Dans ton cas la longueur est fixe donc ca va pas être top compliqué. (char[4] maChaine). La comparaison se fera soit via une boucle : tu compares tes caractères un par un, soit grâce à la fonction "strcmp" (je te laisse chercher. ATTENTION je pense que le strcmp s'appuie sur la position du caractère 'fin de chaine', soit '\0', il te faudra donc un tableau de 5 caractère, le dernier étant '\0').
Pour ce qui est de la lecture de fichier, il te faudra regarde du côté de la classe FILE, avec les méthodes fopen, fread, fclose, etc.).

Question : pourquoi ne pas utiliser de c# ? (ou un autre langage plus accessible)

naga
Messages postés
5351
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
17 août 2020
2
Salut,

"ATTENTION je pense que le strcmp s'appuie sur la position du caractère 'fin de chaine', soit '\0', il te faudra donc un tableau de 5 caractère, le dernier étant '\0'). "
>>Par forcément tu peux toujours utiliser strncmp en lui précisant la longueur.
Messages postés
4242
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
192
ah oui j'avais oublié ces méthodes annexes ! mon commence à dater un peu, ca fait pas de mal de se rafraichir un peu ^^
Messages postés
5432
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
15 octobre 2020
906
Salut Moustikos54,

j'aimerais savoir comment lire une chaine de caractère en C.

lire à partir de quoi : du clavier en mode terminal ? d'un fichier ? d'autre chose ?

Je vous explique mon problème, j'ai écrit un programme qui lit des codes dans une base de données en CSV et qui les stocke dans un tableau de type char code.

Félicitations :-)

Tu parles du type "char code", qui n'est pas un type standard du C. Alors je ne vois pas très bien quel est le type.

Chaque code est composé de 4 caractères

ok, mais cela ne nous dit pas comment tu les stockes en mémoire (cf. les contributions de nagashima et de Twinuts).

que j'aimerais comparer un par un à 4 autres variables de type char rentrés par l'utilisateur.

Si par "4 autres variables de type char" tu veux parler de 4 chaînes de caractères C contenant au plus 4 caractères chacune, saisies par l'utilisateur au clavier dans un programme en mode terminal, tu peux faire la saisie comme cela :

#include <stdio.h>
#include <string.h>

int main(void)
{
    char saisie[4][5];  /* 4 tableaux de 5 chars */                                                                                                                                                                
    char *p;            /* pour avoir un pointeur sur l'éventuel \n récupéré */
    char c;             /* pour vider stdin */
    int n;

    printf("Veuillez saisir 4 codes de 4 caractères au plus "
            "(les saisies plus longues sont tronquées à 4 caractères).\n");
    for (n= 0; n<4; n++) {
        do {
            printf("saisie %d :\n", n + 1);
            if (fgets(saisie[n], 5, stdin) != NULL)
                if ((p = strchr(saisie[n], '\n')) != NULL)
                    *p = '\0';
            if (strlen(saisie[n]) < 4)
                printf("Erreur, votre saisie comporte moins de "
                        "4 caractères, veuillez recommencer\n");
            else
                while ((c = getchar()) != '\n' && c != EOF)
                    /* purger stdin */ ;
        } while (strlen(saisie[n]) < 4);
    }
    printf("Merci, voici vos 4 saisies :\n");
    for (n= 0; n<4; n++)
        printf("saisie %d = [%s]\n", n + 1, saisie[n]);

    return 0;
}


Dal
Messages postés
5432
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
15 octobre 2020
906
à la réflexion, pour renseigner utilement l'utilisateur, le premier printf en ligne 11 devrait se lire :

printf("Veuillez saisir 4 codes de 4 caractères "
        "(les saisies plus longues sont tronquées à 4 caractères).\n");

les saisies de moins de 4 caractères étant invalides dans mon exemple.


Dal
Messages postés
5
Date d'inscription
mercredi 30 avril 2014
Statut
Membre
Dernière intervention
6 mai 2014

D'abord merci à tous pour vos réponses!

Dal, j'ai déclaré quatre tableaux (tab1[] tab2[]...) dans lesquels sont rentrés les caractères: A B(jusqu'à) Z 1 2 3 (jusqu'à) 9. Lorsque l'utilisateur clique sur les zones appropriées de l'écran, il peut modifier le caractère affiché à l'écran. J'aimerais donc comparer le premier caractère sélectionné par l'utilisateur à la première lettre du code et ainsi de suite.

PS: Je me suis trompé tout à l'heure, je voulais dire char et non char code.
Je ne peux pas utiliser le C# car c'est un travail imposé par mon école.

Merci beaucoup!
Messages postés
5432
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
15 octobre 2020
906
j'ai déclaré quatre tableaux (tab1[] tab2[]...) dans lesquels sont rentrés les caractères: A B(jusqu'à) Z 1 2 3 (jusqu'à) 9.

Oui, tu peux déclarer 4 tableaux pour accueillir tes 4 chaînes de caractères, au lieu d'un tableau à deux dimensions comme dans mon code.

Cependant, il faudra les déclarer avec une taille :
char tab1[5];
pour stocker les 4 caractères plus le '\0' terminal, ou
char tab1[4];
si tu stockes juste 4 caractères.

Lorsque l'utilisateur clique sur les zones appropriées de l'écran, il peut modifier le caractère affiché à l'écran. J'aimerais donc comparer le premier caractère sélectionné par l'utilisateur à la première lettre du code et ainsi de suite.

Ah, et tu veux savoir comment récupérer la valeur de ce premier caractère sélectionné par l'utilisateur, du second, etc., pour les comparer à d'autres ?

Donc ton programme gère la souris, gère la modification de l'affichage d'une interface utilisateur à l'écran. Cela signifie que tu ne fais pas du C standard, et que la lecture des valeurs sélectionnées par l'utilisateur va dépendre de la façon dont tu gères ton interface utilisateur, ce qu'il nous est impossible de deviner si tu ne nous dis rien.

On est un peu loin de ta question initiale "Comment lire une chaine de caractère en C?".

Peut-être que si tu postais un bout de ton code, on y verrait plus clair. Là, pour moi, c'est le brouillard.


Dal
Messages postés
5
Date d'inscription
mercredi 30 avril 2014
Statut
Membre
Dernière intervention
6 mai 2014
>
Messages postés
5432
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
15 octobre 2020

Salut Dal,
J'ai finalement réussi à résoudre mon problème. En lisant les codes aciers, je le stocke dans un tableau a deux dimensions comme vous me l'aviez conseillé. Ça fonctionne mieux et j'ai réussi à faire ce que je voulais.

Merci de votre mobilisation.
Messages postés
4242
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
192
codes ascii peu être ? ^^