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
Utilisateur anonyme - 2 mai 2014 à 14:05
A voir également:
- Comment lire une chaine de caractère en C?
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Caractère ascii - Guide
- Lire epub - Guide
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
3 réponses
Utilisateur anonyme
30 avril 2014 à 15:26
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
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
[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
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 :
Dal
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
[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
30 avril 2014 à 19:46
à la réflexion, pour renseigner utilement l'utilisateur, le premier printf en ligne 11 devrait se lire :
les saisies de moins de 4 caractères étant invalides dans mon exemple.
Dal
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
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
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!
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!
[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
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 :
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
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
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
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.
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.
30 avril 2014 à 16:27
"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.
2 mai 2014 à 11:36