Au sujet des E/S, dans une autre discussion, il m'a été conseillé d e
ne pas inclure 'n' à la fin de printf, ex. : "printf("nBonsoirn") ;
car le 'n' de fin est pris en compte dans le buffer pour le fgets
suivant.
Par conséquent, je me suis mis à coder avec 'n' en début et
pas en fin : "printf("nBonsoir") ;
et ligne suivante (selon
l'affichage pour plus de clarté) printf("nn") afin d'éviter que le
'n' de printf se répercute sur la prochaine saisie. Peine perdue,
j'avais oublié que la saisie côté utilisateur est également prise en
compte.
Parmi les réponses, une personne soutient que fflush est
indispensable. Je comprends que cette fonction agit comme on tire sur
une chasse d'eau, évacue tout ce qui se trouve en buffer. Il paraît
que ce n'est pas sans inconvénient.
Est-ce que tout simplement : while(getchar() != 'n') ne peut pas
suffire à cette situation?
J'arrête là, j'ai une grippe, certainement h1n1, ca sera la 2ème fo is
Au sujet des E/S, dans une autre discussion, il m'a été conseillé d e
ne pas inclure 'n' à la fin de printf, ex. : "printf("nBonsoirn") ;
car le 'n' de fin est pris en compte dans le buffer pour le fgets
suivant.
Par conséquent, je me suis mis à coder avec 'n' en début et
pas en fin : "printf("nBonsoir") ;
et ligne suivante (selon
l'affichage pour plus de clarté) printf("nn") afin d'éviter que le
'n' de printf se répercute sur la prochaine saisie. Peine perdue,
j'avais oublié que la saisie côté utilisateur est également prise en
compte.
Parmi les réponses, une personne soutient que fflush est
indispensable. Je comprends que cette fonction agit comme on tire sur
une chasse d'eau, évacue tout ce qui se trouve en buffer. Il paraît
que ce n'est pas sans inconvénient.
Est-ce que tout simplement : while(getchar() != 'n') ne peut pas
suffire à cette situation?
J'arrête là, j'ai une grippe, certainement h1n1, ca sera la 2ème fo is
Au sujet des E/S, dans une autre discussion, il m'a été conseillé d e
ne pas inclure 'n' à la fin de printf, ex. : "printf("nBonsoirn") ;
car le 'n' de fin est pris en compte dans le buffer pour le fgets
suivant.
Par conséquent, je me suis mis à coder avec 'n' en début et
pas en fin : "printf("nBonsoir") ;
et ligne suivante (selon
l'affichage pour plus de clarté) printf("nn") afin d'éviter que le
'n' de printf se répercute sur la prochaine saisie. Peine perdue,
j'avais oublié que la saisie côté utilisateur est également prise en
compte.
Parmi les réponses, une personne soutient que fflush est
indispensable. Je comprends que cette fonction agit comme on tire sur
une chasse d'eau, évacue tout ce qui se trouve en buffer. Il paraît
que ce n'est pas sans inconvénient.
Est-ce que tout simplement : while(getchar() != 'n') ne peut pas
suffire à cette situation?
J'arrête là, j'ai une grippe, certainement h1n1, ca sera la 2ème fo is
> Peux-tu approfondir cette idée ?
C'est en anglais, ça vient des personnes qui postent fréquemement sur
comp.lang.c ;
You mean getchar rather than the second while. The trouble with using
fflush(stdin) is that it is not portable. Some systems provide it as
an extension but even if it is permitted, how can you be sure it does
what you want?
> Peux-tu approfondir cette idée ?
C'est en anglais, ça vient des personnes qui postent fréquemement sur
comp.lang.c ;
You mean getchar rather than the second while. The trouble with using
fflush(stdin) is that it is not portable. Some systems provide it as
an extension but even if it is permitted, how can you be sure it does
what you want?
> Peux-tu approfondir cette idée ?
C'est en anglais, ça vient des personnes qui postent fréquemement sur
comp.lang.c ;
You mean getchar rather than the second while. The trouble with using
fflush(stdin) is that it is not portable. Some systems provide it as
an extension but even if it is permitted, how can you be sure it does
what you want?
En fait, personne n'a évoqué l'emploi de scanf et avec scanf j'obtiens
le bon résultat ???
En fait, personne n'a évoqué l'emploi de scanf et avec scanf j'obtiens
le bon résultat ???
En fait, personne n'a évoqué l'emploi de scanf et avec scanf j'obtiens
le bon résultat ???
wrote:En fait, personne n'a évoqué l'emploi de scanf et avec scanf j'obtiens
le bon résultat ???
L'ennui avec scanf, c'est qu'au début, on trouve toujours ça vachement
pratique et on se demande pourquoi personne n'en avait parlé avant.
Dans les faits, un programmeur C expérimenté l'évoque rarement pour
faire de la saisie, voire pas du tout (à part le K&R mais bon, ce
bouquin n'est pas un programmeur C expérimenté). C'est toujours le
débutant qui débarque avec...
Je te conseille vivement de fuir scanf() comme la peste (surtout que
t'as pas encore entamé les pointeurs), même si ça semble marcher pour
l'instant. Pour faire court, scanf() est le pendant de printf() et n'a
un comportement acceptable qu'avec des sorties de printf() redirigées
sur scanf() (par exemple, la sortie stdout d'un programme vers l'entrée
stdin d'un autre). Dans ce cas, c'est pratique, car on peut avoir les
mêmes arguments pour les deux, chaînes de format compris. C'est un peu
comme une interface machine-machine quoi... mais coté saisie
utilisateur, si tu tiens à tes cheveux, fuis !
Si tu n'es pas convaincu, alors ceci devrait t'aider le jour où tu auras
un pépin avec cette horreur :
http://xrenault.developpez.com/tutoriels/c/scanf/
bpascal123@googlemail.com wrote:
En fait, personne n'a évoqué l'emploi de scanf et avec scanf j'obtiens
le bon résultat ???
L'ennui avec scanf, c'est qu'au début, on trouve toujours ça vachement
pratique et on se demande pourquoi personne n'en avait parlé avant.
Dans les faits, un programmeur C expérimenté l'évoque rarement pour
faire de la saisie, voire pas du tout (à part le K&R mais bon, ce
bouquin n'est pas un programmeur C expérimenté). C'est toujours le
débutant qui débarque avec...
Je te conseille vivement de fuir scanf() comme la peste (surtout que
t'as pas encore entamé les pointeurs), même si ça semble marcher pour
l'instant. Pour faire court, scanf() est le pendant de printf() et n'a
un comportement acceptable qu'avec des sorties de printf() redirigées
sur scanf() (par exemple, la sortie stdout d'un programme vers l'entrée
stdin d'un autre). Dans ce cas, c'est pratique, car on peut avoir les
mêmes arguments pour les deux, chaînes de format compris. C'est un peu
comme une interface machine-machine quoi... mais coté saisie
utilisateur, si tu tiens à tes cheveux, fuis !
Si tu n'es pas convaincu, alors ceci devrait t'aider le jour où tu auras
un pépin avec cette horreur :
http://xrenault.developpez.com/tutoriels/c/scanf/
wrote:En fait, personne n'a évoqué l'emploi de scanf et avec scanf j'obtiens
le bon résultat ???
L'ennui avec scanf, c'est qu'au début, on trouve toujours ça vachement
pratique et on se demande pourquoi personne n'en avait parlé avant.
Dans les faits, un programmeur C expérimenté l'évoque rarement pour
faire de la saisie, voire pas du tout (à part le K&R mais bon, ce
bouquin n'est pas un programmeur C expérimenté). C'est toujours le
débutant qui débarque avec...
Je te conseille vivement de fuir scanf() comme la peste (surtout que
t'as pas encore entamé les pointeurs), même si ça semble marcher pour
l'instant. Pour faire court, scanf() est le pendant de printf() et n'a
un comportement acceptable qu'avec des sorties de printf() redirigées
sur scanf() (par exemple, la sortie stdout d'un programme vers l'entrée
stdin d'un autre). Dans ce cas, c'est pratique, car on peut avoir les
mêmes arguments pour les deux, chaînes de format compris. C'est un peu
comme une interface machine-machine quoi... mais coté saisie
utilisateur, si tu tiens à tes cheveux, fuis !
Si tu n'es pas convaincu, alors ceci devrait t'aider le jour où tu auras
un pépin avec cette horreur :
http://xrenault.developpez.com/tutoriels/c/scanf/
Le 01/12/2009 17:56, a écrit :
> J'avoue passer beaucoup de temps sur ce code mais d'un point de vu
> implémentation d'un algorithme basique je le trouve intéressant pou r
> me pencher dessus.
> Donc quand j'exécute le code avec par exemple : Ch1 = jour ... Ch2 =
> bonjour ... ça fonctionne, le "trouve!" de la condition if s'affiche.
> Cependant quand j'exécute avec Ch1 = bon ... Ch2 = bonjour ... rien
> ne s'affiche
[...]
> printf("nnEntrez la chaine a rech. Ch1 : ") ;
> fgets(Ch1, 40, stdin) ;
> printf("nEntrez la chaine Sujet. : ") ;
> fgets(Suj, 80, stdin) ;
Dans le premier cas, tu compares "journ" et "bonjourn", dans le second
"bonn", et "bonjourn". C'est le caractère 'n' qui empêche la secon de
comparaison de fonctionner.
--
Richard
Le 01/12/2009 17:56, bpascal...@googlemail.com a écrit :
> J'avoue passer beaucoup de temps sur ce code mais d'un point de vu
> implémentation d'un algorithme basique je le trouve intéressant pou r
> me pencher dessus.
> Donc quand j'exécute le code avec par exemple : Ch1 = jour ... Ch2 =
> bonjour ... ça fonctionne, le "trouve!" de la condition if s'affiche.
> Cependant quand j'exécute avec Ch1 = bon ... Ch2 = bonjour ... rien
> ne s'affiche
[...]
> printf("nnEntrez la chaine a rech. Ch1 : ") ;
> fgets(Ch1, 40, stdin) ;
> printf("nEntrez la chaine Sujet. : ") ;
> fgets(Suj, 80, stdin) ;
Dans le premier cas, tu compares "journ" et "bonjourn", dans le second
"bonn", et "bonjourn". C'est le caractère 'n' qui empêche la secon de
comparaison de fonctionner.
--
Richard
Le 01/12/2009 17:56, a écrit :
> J'avoue passer beaucoup de temps sur ce code mais d'un point de vu
> implémentation d'un algorithme basique je le trouve intéressant pou r
> me pencher dessus.
> Donc quand j'exécute le code avec par exemple : Ch1 = jour ... Ch2 =
> bonjour ... ça fonctionne, le "trouve!" de la condition if s'affiche.
> Cependant quand j'exécute avec Ch1 = bon ... Ch2 = bonjour ... rien
> ne s'affiche
[...]
> printf("nnEntrez la chaine a rech. Ch1 : ") ;
> fgets(Ch1, 40, stdin) ;
> printf("nEntrez la chaine Sujet. : ") ;
> fgets(Suj, 80, stdin) ;
Dans le premier cas, tu compares "journ" et "bonjourn", dans le second
"bonn", et "bonjourn". C'est le caractère 'n' qui empêche la secon de
comparaison de fonctionner.
--
Richard
printf("nnEntrez une chaine de caractere Suj : ") ;
fgets(Suj, 50, stdin) ;
printf("nEntrez une chaine de caractere Obj : ") ;
fgets(Obj, 30, stdin) ;
/* Manip pour enlever 'n' si par exemple j
on entre pour sujet "bonjour" et pour obj "bon"
ds ce cas ca ne marche (en l'absence des 2
boucles qui suivent) pas alors que si on entre
"bon" au lieu de "jour" ça fonctionne...
*/
for ( i = 0 ; Suj[i] ; i++)
;
i = i - 1 ;
Suj[i] = ' ' ;
for ( i = 0 ; Obj[i] ; i++ )
;
i-- ;
Obj[i] = ' ' ;
printf("nnEntrez une chaine de caractere Suj : ") ;
fgets(Suj, 50, stdin) ;
printf("nEntrez une chaine de caractere Obj : ") ;
fgets(Obj, 30, stdin) ;
/* Manip pour enlever 'n' si par exemple j
on entre pour sujet "bonjour" et pour obj "bon"
ds ce cas ca ne marche (en l'absence des 2
boucles qui suivent) pas alors que si on entre
"bon" au lieu de "jour" ça fonctionne...
*/
for ( i = 0 ; Suj[i] ; i++)
;
i = i - 1 ;
Suj[i] = ' ' ;
for ( i = 0 ; Obj[i] ; i++ )
;
i-- ;
Obj[i] = ' ' ;
printf("nnEntrez une chaine de caractere Suj : ") ;
fgets(Suj, 50, stdin) ;
printf("nEntrez une chaine de caractere Obj : ") ;
fgets(Obj, 30, stdin) ;
/* Manip pour enlever 'n' si par exemple j
on entre pour sujet "bonjour" et pour obj "bon"
ds ce cas ca ne marche (en l'absence des 2
boucles qui suivent) pas alors que si on entre
"bon" au lieu de "jour" ça fonctionne...
*/
for ( i = 0 ; Suj[i] ; i++)
;
i = i - 1 ;
Suj[i] = ' ' ;
for ( i = 0 ; Obj[i] ; i++ )
;
i-- ;
Obj[i] = ' ' ;
/* Manip pour enlever 'n' si par exemple j
on entre pour sujet "bonjour" et pour obj "bon"
ds ce cas ca ne marche (en l'absence des 2
boucles qui suivent) pas alors que si on entre
"bon" au lieu de "jour" ça fonctionne...
*/
for ( i = 0 ; Suj[i] ; i++)
;
i = i - 1 ;
Suj[i] = ' ' ;
/* Manip pour enlever 'n' si par exemple j
on entre pour sujet "bonjour" et pour obj "bon"
ds ce cas ca ne marche (en l'absence des 2
boucles qui suivent) pas alors que si on entre
"bon" au lieu de "jour" ça fonctionne...
*/
for ( i = 0 ; Suj[i] ; i++)
;
i = i - 1 ;
Suj[i] = ' ' ;
/* Manip pour enlever 'n' si par exemple j
on entre pour sujet "bonjour" et pour obj "bon"
ds ce cas ca ne marche (en l'absence des 2
boucles qui suivent) pas alors que si on entre
"bon" au lieu de "jour" ça fonctionne...
*/
for ( i = 0 ; Suj[i] ; i++)
;
i = i - 1 ;
Suj[i] = ' ' ;
Note: J'aime pas Suj[i] on dirait du pascal.. beurk. Si on veut faire du
C sans pointeur autant franchement apprendre un autre langage. Le gars
qui se présente à moi en prétendant faire du C sans savoir manipuler et
utiliser les pointeurs il ne va pas faire illusion longtemps.
Note: J'aime pas Suj[i] on dirait du pascal.. beurk. Si on veut faire du
C sans pointeur autant franchement apprendre un autre langage. Le gars
qui se présente à moi en prétendant faire du C sans savoir manipuler et
utiliser les pointeurs il ne va pas faire illusion longtemps.
Note: J'aime pas Suj[i] on dirait du pascal.. beurk. Si on veut faire du
C sans pointeur autant franchement apprendre un autre langage. Le gars
qui se présente à moi en prétendant faire du C sans savoir manipuler et
utiliser les pointeurs il ne va pas faire illusion longtemps.