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...
Version imprimable
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...
C'est pour ça que le fonction clean() fait le ménage.Citation:
Envoyé par miron
EDIT : http://forum-images.hardware.fr/imag...ou_grilled.gif
Mais la vrai solution est d'écrire ses propres fonctions de saisies.
http://emmanuel-delahaye.developpez.com/inputs.htm
tres interessant,(Merci)Citation:
Envoyé par Emmanuel Delahaye
seulement trois petites questions,
Code:
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'...Citation:
Envoyé par miron
Tu as lu la doc de strchr() au moins ?Citation:
Code:
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...Citation:
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 rienCode:p = NULL;
soitce qui changerais la fin de la chaine.Code:*p = '\0';
A moins queetCode:'\0'
soit la meme chose...:oops:Code:0
Ben oui, on change la fin de la chaîne : On la termine juste avant le \n (qu'on écrase).Citation:
Envoyé par miron
donc 0 == '\0' ????Citation:
Envoyé par Médinoc
Oui.
'\0' est un char dont la valeur est 0.
Contrairement à '0' dont la valeur ASCII est 48 (0x30).
C'est le marqueur de fin de chaine : Ce n'est pas un scoop...Citation:
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%).
J'en ai un que je consulte régulierement, mais j'avais pas fait le lien dsl.Citation:
Envoyé par Emmanuel Delahaye
Merci.
bonne journée a vous tous.