Pour ça, il suffit d'avoir une fonction purge() comme celle qui est si souvent postée ici.
Et puis, ça permet de savoir si la ligne a été entièrement prise ou tronquée...
Pour ça, il suffit d'avoir une fonction purge() comme celle qui est si souvent postée ici.
Et puis, ça permet de savoir si la ligne a été entièrement prise ou tronquée...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
C'est pour ça que le fonction clean() fait le ménage.Envoyé par miron
EDIT :
Mais la vrai solution est d'écrire ses propres fonctions de saisies.
http://emmanuel-delahaye.developpez.com/inputs.htm
tres interessant,(Merci)Envoyé par Emmanuel Delahaye
seulement trois petites questions,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 #include <stdio.h> #include <string.h> static void purger(void) { int c; while ((c = getchar()) != '\n' && c != EOF) {} } static void clean (char *chaine)//a quoi sert le static? { char *p = strchr(chaine, '\n'); int c; if (p) { *p = 0;//A quoi cela sert? je comprend peu etre pas bien ce que retourne strchr } else { purger(); } } int main (void) { char chaine[20], chaine2[20]; printf("Tapez une phrase : \n"); fgets(chaine, sizeof chaine, stdin); clean(chaine); printf("Vous avez tape : '%s'", chaine); printf("Tapez une phrase : \n"); fgets(chaine2, sizeof chaine2, stdin); clean(chaine2); printf("Vous avez tape : '%s'", chaine2); return 0; }
Ici, les fonctions sont 'privées', mais en réalité, si on les mets en bibliothèque, il faut évidement retirer le 'static'...Envoyé par miron
Tu as lu la doc de strchr() au moins ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 { char *p = strchr(chaine, '\n'); int c; /* -ed- ce 'c' est inutile ... */ if (p) { *p = 0;//A quoi cela sert? je comprend peu etre pas bien ce que retourne strchr
http://man.developpez.com/
Je n'ai vu que 2 questions...
Oui bon j'ai conté 2 fois static...Envoyé par Emmanuel Delahaye
Bin strchr() retourne l@ de '\n' (en l'occurence), mais en fait ce qui me perturbe c'est de metre un caractere a 0.
Soit on metce qui ne sert a rien
Code : Sélectionner tout - Visualiser dans une fenêtre à part p = NULL;
soitce qui changerais la fin de la chaine.
Code : Sélectionner tout - Visualiser dans une fenêtre à part *p = '\0';
A moins queet soit la meme chose...
Code : Sélectionner tout - Visualiser dans une fenêtre à part '\0'![]()
Ben oui, on change la fin de la chaîne : On la termine juste avant le \n (qu'on écrase).Envoyé par miron
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Oui.
'\0' est un char dont la valeur est 0.
Contrairement à '0' dont la valeur ASCII est 48 (0x30).
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
C'est le marqueur de fin de chaine : Ce n'est pas un scoop...Envoyé par miron
Ben oui, 0 et '\0', c'est pareil. ('\0' est la notation 'caractère' de 0 en octal.)
'\1' = 1
'\7' = 7
'\10' = 8
'\377' = 255
etc. Il n'est pas inutile d'ouvrir un livre de C de temps en temps...
Sachant que les séquences d'échappement ne sont pas ce qu'on appelle un "code déchiffrable", car certaines séquences sont préfixes d'autres.
À la différence des formats de printf(), qui à ma connaissance, sont déchiffrables (ou des caractères spéciaux en HTML &Co, qui le sont à 100%).
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
J'en ai un que je consulte régulierement, mais j'avais pas fait le lien dsl.Envoyé par Emmanuel Delahaye
Merci.
bonne journée a vous tous.
Partager