je me pose une question par rapport a la maniere classique de vider le
buffer associe a stdin:
c = getchar();
if (c != \n)
while ( (getchar()) != \n) {
};
Que se passe t-il si stdin ne contient aucun \n? (fichier contenant une
ligne mais aucun \n par exemple). Dans ce cas, il me semble que l'on
pourrait avoir un probleme non?
Comment feriez vous pour resoudre ce probleme? (J'ai bien une petite
idee mais je prefere savoir si c'est la bonne..;) )
je me pose une question par rapport a la maniere classique de vider le buffer associe a stdin:
c = getchar(); if (c != n) while ( (getchar()) != n) { };
Que se passe t-il si stdin ne contient aucun n? (fichier contenant une ligne mais aucun n par exemple). Dans ce cas, il me semble que l'on pourrait avoir un probleme non?
Il « suffit » de faire les choses comme il faut et _aussi_ tester que c ne vaut pas EOF.
Antoine
En 4182041b$1@epflnews.epfl.ch, korchkidu va escriure:
je me pose une question par rapport a la maniere classique de vider le
buffer associe a stdin:
c = getchar();
if (c != n)
while ( (getchar()) != n) {
};
Que se passe t-il si stdin ne contient aucun n? (fichier contenant
une ligne mais aucun n par exemple). Dans ce cas, il me semble que
l'on pourrait avoir un probleme non?
Il « suffit » de faire les choses comme il faut et _aussi_ tester que c ne
vaut pas EOF.
je me pose une question par rapport a la maniere classique de vider le buffer associe a stdin:
c = getchar(); if (c != n) while ( (getchar()) != n) { };
Que se passe t-il si stdin ne contient aucun n? (fichier contenant une ligne mais aucun n par exemple). Dans ce cas, il me semble que l'on pourrait avoir un probleme non?
Il « suffit » de faire les choses comme il faut et _aussi_ tester que c ne vaut pas EOF.
Antoine
Marc Boyer
korchkidu wrote:
Bonjour,
je me pose une question par rapport a la maniere classique de vider le buffer associe a stdin:
c = getchar(); if (c != n) while ( (getchar()) != n) { };
C'est la manière classique ?
Que se passe t-il si stdin ne contient aucun n? (fichier contenant une ligne mais aucun n par exemple). Dans ce cas, il me semble que l'on pourrait avoir un probleme non?
Comment feriez vous pour resoudre ce probleme? (J'ai bien une petite idee mais je prefere savoir si c'est la bonne..;) )
void skeep_line(FILE* in){ int c; do { c= getchar(in); } while( c != 'n' && c != EOF); }
Non ?
Marc Boyer -- Je ne respecte plus le code de la route à vélo depuis une double fracture due au fait que j'étais le seul à le respecter.
korchkidu wrote:
Bonjour,
je me pose une question par rapport a la maniere classique de vider le
buffer associe a stdin:
c = getchar();
if (c != n)
while ( (getchar()) != n) {
};
C'est la manière classique ?
Que se passe t-il si stdin ne contient aucun n? (fichier contenant une
ligne mais aucun n par exemple). Dans ce cas, il me semble que l'on
pourrait avoir un probleme non?
Comment feriez vous pour resoudre ce probleme? (J'ai bien une petite
idee mais je prefere savoir si c'est la bonne..;) )
void skeep_line(FILE* in){
int c;
do {
c= getchar(in);
} while( c != 'n' && c != EOF);
}
Non ?
Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.
je me pose une question par rapport a la maniere classique de vider le buffer associe a stdin:
c = getchar(); if (c != n) while ( (getchar()) != n) { };
C'est la manière classique ?
Que se passe t-il si stdin ne contient aucun n? (fichier contenant une ligne mais aucun n par exemple). Dans ce cas, il me semble que l'on pourrait avoir un probleme non?
Comment feriez vous pour resoudre ce probleme? (J'ai bien une petite idee mais je prefere savoir si c'est la bonne..;) )
void skeep_line(FILE* in){ int c; do { c= getchar(in); } while( c != 'n' && c != EOF); }
Non ?
Marc Boyer -- Je ne respecte plus le code de la route à vélo depuis une double fracture due au fait que j'étais le seul à le respecter.
DINH Viêt Hoà
void skeep_line(FILE* in){ int c; do { c= getchar(in); } while( c != 'n' && c != EOF); }
Il faudrait effectivement corriger la FAQ car cet exemple boucle sans fin en cas de dernière ligne sans 'n' (difficile avec un clavier, mais possible avec des redirections)
Marc Boyer wrote:
korchkidu wrote:
Bonjour,
je me pose une question par rapport a la maniere classique de vider le
buffer associe a stdin:
c = getchar();
if (c != n)
while ( (getchar()) != n) {
};
C'est la manière classique ?
C'est celle qui est detaillee dans la FAQ. C'est effectivement ce que
j'entendais par classique..;)
Il faudrait effectivement corriger la FAQ car cet exemple boucle sans fin en cas
de dernière ligne sans 'n'
(difficile avec un clavier, mais possible avec des redirections)
Il faudrait effectivement corriger la FAQ car cet exemple boucle sans fin en cas de dernière ligne sans 'n' (difficile avec un clavier, mais possible avec des redirections)
Horst Kraemer
korchkidu wrote:
Bonjour,
je me pose une question par rapport a la maniere classique de vider le buffer associe a stdin:
c = getchar(); if (c != n) while ( (getchar()) != n) { };
Que se passe t-il si stdin ne contient aucun n? (fichier contenant une ligne mais aucun n par exemple). Dans ce cas, il me semble que l'on pourrait avoir un probleme non?
D'abord je ne comprends pas la différence entre le code ci-haut (FAQ) et un simple
while ( getchar()!='n' );
Dans mon catéchisme
if (getchar()!='n') if (getchar()!='n') if (getchar()!='n') if (getchar()!='n') if (getchar()!='n') if (getchar()!='n') if (getchar()!='n') while (getchar()!='n') {}
équivaut à
while (getchar()!='n');
;-)
Si la ligne n'est pas terminée par n, alors on aura le problème que la boucle ne termine jamais parce que getchar() renvoie EOF ad infinitum...
A remplacer par
int c; ... while ( (c=getchar())!=EOF && c!='n' );
if (c==EOF) { /* fin du fichier ou erreur de lecture */ } else { /* final n caught...*/ }
-- Horst
-- Lâche pas la patate!
korchkidu <korch_ki_du@yahoo.fr> wrote:
Bonjour,
je me pose une question par rapport a la maniere classique de vider le
buffer associe a stdin:
c = getchar();
if (c != n)
while ( (getchar()) != n) {
};
Que se passe t-il si stdin ne contient aucun n? (fichier contenant une
ligne mais aucun n par exemple). Dans ce cas, il me semble que l'on
pourrait avoir un probleme non?
D'abord je ne comprends pas la différence entre le code ci-haut (FAQ)
et un simple
while ( getchar()!='n' );
Dans mon catéchisme
if (getchar()!='n')
if (getchar()!='n')
if (getchar()!='n')
if (getchar()!='n')
if (getchar()!='n')
if (getchar()!='n')
if (getchar()!='n')
while (getchar()!='n') {}
équivaut à
while (getchar()!='n');
;-)
Si la ligne n'est pas terminée par n, alors on aura le problème que
la boucle ne termine jamais parce que getchar() renvoie EOF ad
infinitum...
A remplacer par
int c;
...
while ( (c=getchar())!=EOF && c!='n' );
if (c==EOF) {
/* fin du fichier ou erreur de lecture */
}
else { /* final n caught...*/ }
je me pose une question par rapport a la maniere classique de vider le buffer associe a stdin:
c = getchar(); if (c != n) while ( (getchar()) != n) { };
Que se passe t-il si stdin ne contient aucun n? (fichier contenant une ligne mais aucun n par exemple). Dans ce cas, il me semble que l'on pourrait avoir un probleme non?
D'abord je ne comprends pas la différence entre le code ci-haut (FAQ) et un simple
while ( getchar()!='n' );
Dans mon catéchisme
if (getchar()!='n') if (getchar()!='n') if (getchar()!='n') if (getchar()!='n') if (getchar()!='n') if (getchar()!='n') if (getchar()!='n') while (getchar()!='n') {}
équivaut à
while (getchar()!='n');
;-)
Si la ligne n'est pas terminée par n, alors on aura le problème que la boucle ne termine jamais parce que getchar() renvoie EOF ad infinitum...
A remplacer par
int c; ... while ( (c=getchar())!=EOF && c!='n' );
if (c==EOF) { /* fin du fichier ou erreur de lecture */ } else { /* final n caught...*/ }
-- Horst
-- Lâche pas la patate!
Emmanuel Delahaye
korchkidu wrote on 29/10/04 :
Bonjour,
je me pose une question par rapport a la maniere classique de vider le buffer associe a stdin:
Si le programme est bien écrit (à base de fgets()), il n'y a pas besoin. Affaire suivante...
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
korchkidu wrote on 29/10/04 :
Bonjour,
je me pose une question par rapport a la maniere classique de vider le buffer
associe a stdin:
Si le programme est bien écrit (à base de fgets()), il n'y a pas
besoin. Affaire suivante...
--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html