Comment lire une chaine de caractère en C?

Résolu/Fermé
Moustikos54 Messages postés 5 Date d'inscription mercredi 30 avril 2014 Statut Membre Dernière intervention 6 mai 2014 - 30 avril 2014 à 15:17
 Utilisateur anonyme - 2 mai 2014 à 14:05
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.
A voir également:

3 réponses

Utilisateur anonyme
30 avril 2014 à 15:26
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
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 2
30 avril 2014 à 16:27
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.
0
Utilisateur anonyme
2 mai 2014 à 11:36
ah oui j'avais oublié ces méthodes annexes ! mon commence à dater un peu, ca fait pas de mal de se rafraichir un peu ^^
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 30/04/2014 à 19:15
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
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
30 avril 2014 à 19:46
à 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
0
Moustikos54 Messages postés 5 Date d'inscription mercredi 30 avril 2014 Statut Membre Dernière intervention 6 mai 2014
30 avril 2014 à 20:19
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!
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
2 mai 2014 à 10:21
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
0
Moustikos54 Messages postés 5 Date d'inscription mercredi 30 avril 2014 Statut Membre Dernière intervention 6 mai 2014 > [Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024
2 mai 2014 à 12:41
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.
0
Utilisateur anonyme
2 mai 2014 à 14:05
codes ascii peu être ? ^^
0