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..;)
http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc0014.html#q_4
A moins que celle-ci ne soit pas la bonne....
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..;)
http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc0014.html#q_4
A moins que celle-ci ne soit pas la bonne....
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..;)
http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc0014.html#q_4
A moins que celle-ci ne soit pas la bonne....
void skeep_line(FILE* in){
int c;
do {
c= getchar(in);
} while( c != 'n' && c != EOF);
}
Non ?
void skeep_line(FILE* in){
int c;
do {
c= getchar(in);
} while( c != 'n' && c != EOF);
}
Non ?
void skeep_line(FILE* in){
int c;
do {
c= getchar(in);
} while( c != 'n' && c != EOF);
}
Non ?
void skeep_line(FILE* in){
int c;
do {
c= getchar(in);
} while( c != 'n' && c != EOF);
}
Non ?
NON :
- skeep -> skip
- getc(in) et non getchar(in)
- éviter d'utiliser in comme nom de variable, c'est un mot clé dans nombre de
dialectes dérivés.
- éviter les boucles do/while qui sont souvent beuguées.
Je préfère qu'on utilise l'idiome >> while ((c = getc(in)) != EOF) << et tester
le condition spécifique sur 'n' dans le corps de la boucle.
void skeep_line(FILE* in){
int c;
do {
c= getchar(in);
} while( c != 'n' && c != EOF);
}
Non ?
NON :
- skeep -> skip
- getc(in) et non getchar(in)
- éviter d'utiliser in comme nom de variable, c'est un mot clé dans nombre de
dialectes dérivés.
- éviter les boucles do/while qui sont souvent beuguées.
Je préfère qu'on utilise l'idiome >> while ((c = getc(in)) != EOF) << et tester
le condition spécifique sur 'n' dans le corps de la boucle.
void skeep_line(FILE* in){
int c;
do {
c= getchar(in);
} while( c != 'n' && c != EOF);
}
Non ?
NON :
- skeep -> skip
- getc(in) et non getchar(in)
- éviter d'utiliser in comme nom de variable, c'est un mot clé dans nombre de
dialectes dérivés.
- éviter les boucles do/while qui sont souvent beuguées.
Je préfère qu'on utilise l'idiome >> while ((c = getc(in)) != EOF) << et tester
le condition spécifique sur 'n' dans le corps de la boucle.
Charlie Gordon wrote:void skeep_line(FILE* in){
int c;
do {
c= getchar(in);
} while( c != 'n' && c != EOF);
}
Non ?
NON :
- skeep -> skip
- getc(in) et non getchar(in)
- éviter d'utiliser in comme nom de variable, c'est un mot clé dans nombre
de
dialectes dérivés.
Cela n'a pas d'importance tant que la fonction n'est pas inline dans un
header, ce qui est le cas ici.
- éviter les boucles do/while qui sont souvent beuguées.
Veux-tu dire que les compilos traduisent mal les do/while? As-tu des
exemples concrets (compilo, code C, code asm) pour dire que do/while est
moins fiable de while? (je dois dire que je suis sceptique).
Charlie Gordon wrote:
void skeep_line(FILE* in){
int c;
do {
c= getchar(in);
} while( c != 'n' && c != EOF);
}
Non ?
NON :
- skeep -> skip
- getc(in) et non getchar(in)
- éviter d'utiliser in comme nom de variable, c'est un mot clé dans nombre
de
dialectes dérivés.
Cela n'a pas d'importance tant que la fonction n'est pas inline dans un
header, ce qui est le cas ici.
- éviter les boucles do/while qui sont souvent beuguées.
Veux-tu dire que les compilos traduisent mal les do/while? As-tu des
exemples concrets (compilo, code C, code asm) pour dire que do/while est
moins fiable de while? (je dois dire que je suis sceptique).
Charlie Gordon wrote:void skeep_line(FILE* in){
int c;
do {
c= getchar(in);
} while( c != 'n' && c != EOF);
}
Non ?
NON :
- skeep -> skip
- getc(in) et non getchar(in)
- éviter d'utiliser in comme nom de variable, c'est un mot clé dans nombre
de
dialectes dérivés.
Cela n'a pas d'importance tant que la fonction n'est pas inline dans un
header, ce qui est le cas ici.
- éviter les boucles do/while qui sont souvent beuguées.
Veux-tu dire que les compilos traduisent mal les do/while? As-tu des
exemples concrets (compilo, code C, code asm) pour dire que do/while est
moins fiable de while? (je dois dire que je suis sceptique).
"Laurent Deniau" wrote in message
news:cm82vi$c50$Charlie Gordon wrote:void skeep_line(FILE* in){
int c;
do {
c= getchar(in);
} while( c != 'n' && c != EOF);
}
Non ?
NON :
- skeep -> skip
- getc(in) et non getchar(in)
- éviter d'utiliser in comme nom de variable, c'est un mot clé dans nombre
dedialectes dérivés.
Cela n'a pas d'importance tant que la fonction n'est pas inline dans un
header, ce qui est le cas ici.
C'est une mauvaise habitude. Il est préférable de s'abstenir utiliser les mots
clés du C++ dans du code C aussi : class, private, public, this, new, delete...
Cela ne cause pas de beugues tout de suite, mais rend le code moins portable, et
surtout moins lisible.
- éviter les boucles do/while qui sont souvent beuguées.
Veux-tu dire que les compilos traduisent mal les do/while? As-tu des
exemples concrets (compilo, code C, code asm) pour dire que do/while est
moins fiable de while? (je dois dire que je suis sceptique).
Pas du tout, je ne mets pas en cause les compilateurs C, mais les programmeurs.
La boucle do/while est parfaitement définie dans le langage, et semble utile
pour certains cas de boucles ou la première itération doit toujours être faite.
J'ai malheureusement souvent constaté que la façon de construire ces boucles
conduit de nombreux programmeurs à y introduire des beugues que l'utilisation
d'un for() aurait évités. Donc je recommande d'éviter d'utiliser do/while, et
de se méfier de ceux qu'on rencontre.
Personnellement, je n'utilise do/while que dans certaines macros, pour encadrer
des blocs d'instructions au sein d'une instruction unique:
#define some_macro(a,b) do { foo(a); bar(b); } while(0)
Ou pour implementer des constructions spéciales comme tu le fais dans tes
packages oopc et exception.
"Laurent Deniau" <Laurent.Deniau@cern.ch> wrote in message
news:cm82vi$c50$1@sunnews.cern.ch...
Charlie Gordon wrote:
void skeep_line(FILE* in){
int c;
do {
c= getchar(in);
} while( c != 'n' && c != EOF);
}
Non ?
NON :
- skeep -> skip
- getc(in) et non getchar(in)
- éviter d'utiliser in comme nom de variable, c'est un mot clé dans nombre
de
dialectes dérivés.
Cela n'a pas d'importance tant que la fonction n'est pas inline dans un
header, ce qui est le cas ici.
C'est une mauvaise habitude. Il est préférable de s'abstenir utiliser les mots
clés du C++ dans du code C aussi : class, private, public, this, new, delete...
Cela ne cause pas de beugues tout de suite, mais rend le code moins portable, et
surtout moins lisible.
- éviter les boucles do/while qui sont souvent beuguées.
Veux-tu dire que les compilos traduisent mal les do/while? As-tu des
exemples concrets (compilo, code C, code asm) pour dire que do/while est
moins fiable de while? (je dois dire que je suis sceptique).
Pas du tout, je ne mets pas en cause les compilateurs C, mais les programmeurs.
La boucle do/while est parfaitement définie dans le langage, et semble utile
pour certains cas de boucles ou la première itération doit toujours être faite.
J'ai malheureusement souvent constaté que la façon de construire ces boucles
conduit de nombreux programmeurs à y introduire des beugues que l'utilisation
d'un for() aurait évités. Donc je recommande d'éviter d'utiliser do/while, et
de se méfier de ceux qu'on rencontre.
Personnellement, je n'utilise do/while que dans certaines macros, pour encadrer
des blocs d'instructions au sein d'une instruction unique:
#define some_macro(a,b) do { foo(a); bar(b); } while(0)
Ou pour implementer des constructions spéciales comme tu le fais dans tes
packages oopc et exception.
"Laurent Deniau" wrote in message
news:cm82vi$c50$Charlie Gordon wrote:void skeep_line(FILE* in){
int c;
do {
c= getchar(in);
} while( c != 'n' && c != EOF);
}
Non ?
NON :
- skeep -> skip
- getc(in) et non getchar(in)
- éviter d'utiliser in comme nom de variable, c'est un mot clé dans nombre
dedialectes dérivés.
Cela n'a pas d'importance tant que la fonction n'est pas inline dans un
header, ce qui est le cas ici.
C'est une mauvaise habitude. Il est préférable de s'abstenir utiliser les mots
clés du C++ dans du code C aussi : class, private, public, this, new, delete...
Cela ne cause pas de beugues tout de suite, mais rend le code moins portable, et
surtout moins lisible.
- éviter les boucles do/while qui sont souvent beuguées.
Veux-tu dire que les compilos traduisent mal les do/while? As-tu des
exemples concrets (compilo, code C, code asm) pour dire que do/while est
moins fiable de while? (je dois dire que je suis sceptique).
Pas du tout, je ne mets pas en cause les compilateurs C, mais les programmeurs.
La boucle do/while est parfaitement définie dans le langage, et semble utile
pour certains cas de boucles ou la première itération doit toujours être faite.
J'ai malheureusement souvent constaté que la façon de construire ces boucles
conduit de nombreux programmeurs à y introduire des beugues que l'utilisation
d'un for() aurait évités. Donc je recommande d'éviter d'utiliser do/while, et
de se méfier de ceux qu'on rencontre.
Personnellement, je n'utilise do/while que dans certaines macros, pour encadrer
des blocs d'instructions au sein d'une instruction unique:
#define some_macro(a,b) do { foo(a); bar(b); } while(0)
Ou pour implementer des constructions spéciales comme tu le fais dans tes
packages oopc et exception.
C'est une mauvaise habitude. Il est préférable de s'abstenir utiliser les
mots clés du C++ dans du code C aussi : class, private, public, this, new,
delete...
Cela ne cause pas de beugues tout de suite, mais rend le code moins portable,
et surtout moins lisible.
Pas du tout, je ne mets pas en cause les compilateurs C, mais les
programmeurs. La boucle do/while est parfaitement définie dans le langage, et
semble utile pour certains cas de boucles ou la première itération doit
toujours être faite. J'ai malheureusement souvent constaté que la façon de
construire ces boucles conduit de nombreux programmeurs à y introduire des
beugues que l'utilisation d'un for() aurait évités. Donc je recommande
d'éviter d'utiliser do/while, et de se méfier de ceux qu'on rencontre.
Personnellement, je n'utilise do/while que dans certaines macros, pour
encadrer des blocs d'instructions au sein d'une instruction unique:
#define some_macro(a,b) do { foo(a); bar(b); } while(0)
C'est une mauvaise habitude. Il est préférable de s'abstenir utiliser les
mots clés du C++ dans du code C aussi : class, private, public, this, new,
delete...
Cela ne cause pas de beugues tout de suite, mais rend le code moins portable,
et surtout moins lisible.
Pas du tout, je ne mets pas en cause les compilateurs C, mais les
programmeurs. La boucle do/while est parfaitement définie dans le langage, et
semble utile pour certains cas de boucles ou la première itération doit
toujours être faite. J'ai malheureusement souvent constaté que la façon de
construire ces boucles conduit de nombreux programmeurs à y introduire des
beugues que l'utilisation d'un for() aurait évités. Donc je recommande
d'éviter d'utiliser do/while, et de se méfier de ceux qu'on rencontre.
Personnellement, je n'utilise do/while que dans certaines macros, pour
encadrer des blocs d'instructions au sein d'une instruction unique:
#define some_macro(a,b) do { foo(a); bar(b); } while(0)
C'est une mauvaise habitude. Il est préférable de s'abstenir utiliser les
mots clés du C++ dans du code C aussi : class, private, public, this, new,
delete...
Cela ne cause pas de beugues tout de suite, mais rend le code moins portable,
et surtout moins lisible.
Pas du tout, je ne mets pas en cause les compilateurs C, mais les
programmeurs. La boucle do/while est parfaitement définie dans le langage, et
semble utile pour certains cas de boucles ou la première itération doit
toujours être faite. J'ai malheureusement souvent constaté que la façon de
construire ces boucles conduit de nombreux programmeurs à y introduire des
beugues que l'utilisation d'un for() aurait évités. Donc je recommande
d'éviter d'utiliser do/while, et de se méfier de ceux qu'on rencontre.
Personnellement, je n'utilise do/while que dans certaines macros, pour
encadrer des blocs d'instructions au sein d'une instruction unique:
#define some_macro(a,b) do { foo(a); bar(b); } while(0)
Charlie Gordon wrote on 03/11/04 :C'est une mauvaise habitude. Il est préférable de s'abstenir utiliser les
mots clés du C++ dans du code C aussi : class, private, public, this, new,
delete...
Au contraire. C'est un bon moyen d'éviter que du code C se retrouve par
erreur compilé en C++, ce qui n'est un giganteste UB.
Cela ne cause pas de beugues tout de suite, mais rend le code moins
portable,
et surtout moins lisible.
Portable avec quoi ?
Pas du tout, je ne mets pas en cause les compilateurs C, mais les
programmeurs. La boucle do/while est parfaitement définie dans le langage,
et
semble utile pour certains cas de boucles ou la première itération doit
toujours être faite. J'ai malheureusement souvent constaté que la façon de
construire ces boucles conduit de nombreux programmeurs à y introduire des
beugues que l'utilisation d'un for() aurait évités. Donc je recommande
d'éviter d'utiliser do/while, et de se méfier de ceux qu'on rencontre.
C'est le programmeur qui est beugué, pas la boucle... do-while a son
role (le repeat until du Pascal à une vache près). Il n'y a aucune
raison de ne pas l'utiliser quand c'est utile. Tu as de drôles de
préjugés parfois...
Charlie Gordon wrote on 03/11/04 :
C'est une mauvaise habitude. Il est préférable de s'abstenir utiliser les
mots clés du C++ dans du code C aussi : class, private, public, this, new,
delete...
Au contraire. C'est un bon moyen d'éviter que du code C se retrouve par
erreur compilé en C++, ce qui n'est un giganteste UB.
Cela ne cause pas de beugues tout de suite, mais rend le code moins
portable,
et surtout moins lisible.
Portable avec quoi ?
Pas du tout, je ne mets pas en cause les compilateurs C, mais les
programmeurs. La boucle do/while est parfaitement définie dans le langage,
et
semble utile pour certains cas de boucles ou la première itération doit
toujours être faite. J'ai malheureusement souvent constaté que la façon de
construire ces boucles conduit de nombreux programmeurs à y introduire des
beugues que l'utilisation d'un for() aurait évités. Donc je recommande
d'éviter d'utiliser do/while, et de se méfier de ceux qu'on rencontre.
C'est le programmeur qui est beugué, pas la boucle... do-while a son
role (le repeat until du Pascal à une vache près). Il n'y a aucune
raison de ne pas l'utiliser quand c'est utile. Tu as de drôles de
préjugés parfois...
Charlie Gordon wrote on 03/11/04 :C'est une mauvaise habitude. Il est préférable de s'abstenir utiliser les
mots clés du C++ dans du code C aussi : class, private, public, this, new,
delete...
Au contraire. C'est un bon moyen d'éviter que du code C se retrouve par
erreur compilé en C++, ce qui n'est un giganteste UB.
Cela ne cause pas de beugues tout de suite, mais rend le code moins
portable,
et surtout moins lisible.
Portable avec quoi ?
Pas du tout, je ne mets pas en cause les compilateurs C, mais les
programmeurs. La boucle do/while est parfaitement définie dans le langage,
et
semble utile pour certains cas de boucles ou la première itération doit
toujours être faite. J'ai malheureusement souvent constaté que la façon de
construire ces boucles conduit de nombreux programmeurs à y introduire des
beugues que l'utilisation d'un for() aurait évités. Donc je recommande
d'éviter d'utiliser do/while, et de se méfier de ceux qu'on rencontre.
C'est le programmeur qui est beugué, pas la boucle... do-while a son
role (le repeat until du Pascal à une vache près). Il n'y a aucune
raison de ne pas l'utiliser quand c'est utile. Tu as de drôles de
préjugés parfois...
Tous les programmeurs sont beugués : il m'a fallu longtemps pour
l'admettre et j'en ai rencontré de tous niveaux dont quelques rares
mais authentiques génies. Mais les génies ne sont pas des surhommes
: s'ils font moins d'erreurs que les autres, c'est aussi parce
qu'ils ont appris à se méfier et évitent de prendre des risques
stupides.
Tous les programmeurs sont beugués : il m'a fallu longtemps pour
l'admettre et j'en ai rencontré de tous niveaux dont quelques rares
mais authentiques génies. Mais les génies ne sont pas des surhommes
: s'ils font moins d'erreurs que les autres, c'est aussi parce
qu'ils ont appris à se méfier et évitent de prendre des risques
stupides.
Tous les programmeurs sont beugués : il m'a fallu longtemps pour
l'admettre et j'en ai rencontré de tous niveaux dont quelques rares
mais authentiques génies. Mais les génies ne sont pas des surhommes
: s'ils font moins d'erreurs que les autres, c'est aussi parce
qu'ils ont appris à se méfier et évitent de prendre des risques
stupides.
"Emmanuel Delahaye" wrote in message
news:Charlie Gordon wrote on 03/11/04 :C'est une mauvaise habitude. Il est préférable de s'abstenir utiliser les
mots clés du C++ dans du code C aussi : class, private, public, this, new,
delete...
Au contraire. C'est un bon moyen d'éviter que du code C se retrouve par
erreur compilé en C++, ce qui n'est un giganteste UB.
Ton argument est completement tiré par les cheveux. En l'occurrence, compiler
en C++ est souvent un bon moyen de découvrir des problèmes.
Cela ne cause pas de beugues tout de suite, mais rend le code moins
portable,et surtout moins lisible.
Portable avec quoi ?
Avec C++ justement! Si d'aventure tu devais porter des routines C dans une
appli C++, tu serais bien content de ne pas avoir à aller à la pêche aux
mots-clés.
Mais l'argument principal pour moi est la lisibilité : si le lecteur connait et
pratique le C et le C++, voire d'autres dialectes dérivés, l'utilisation de
mots-clés pour un autre usage ralentit la lecture, voire engendre de mauvaises
interprétations. C est un langage déjà suffisament subtil pour ne pas rajouter
de pièges au lecteur futur.
"Emmanuel Delahaye" <emdel@YOURBRAnoos.fr> wrote in message
news:mn.1d517d4b63467846.15512@YOURBRAnoos.fr...
Charlie Gordon wrote on 03/11/04 :
C'est une mauvaise habitude. Il est préférable de s'abstenir utiliser les
mots clés du C++ dans du code C aussi : class, private, public, this, new,
delete...
Au contraire. C'est un bon moyen d'éviter que du code C se retrouve par
erreur compilé en C++, ce qui n'est un giganteste UB.
Ton argument est completement tiré par les cheveux. En l'occurrence, compiler
en C++ est souvent un bon moyen de découvrir des problèmes.
Cela ne cause pas de beugues tout de suite, mais rend le code moins
portable,
et surtout moins lisible.
Portable avec quoi ?
Avec C++ justement! Si d'aventure tu devais porter des routines C dans une
appli C++, tu serais bien content de ne pas avoir à aller à la pêche aux
mots-clés.
Mais l'argument principal pour moi est la lisibilité : si le lecteur connait et
pratique le C et le C++, voire d'autres dialectes dérivés, l'utilisation de
mots-clés pour un autre usage ralentit la lecture, voire engendre de mauvaises
interprétations. C est un langage déjà suffisament subtil pour ne pas rajouter
de pièges au lecteur futur.
"Emmanuel Delahaye" wrote in message
news:Charlie Gordon wrote on 03/11/04 :C'est une mauvaise habitude. Il est préférable de s'abstenir utiliser les
mots clés du C++ dans du code C aussi : class, private, public, this, new,
delete...
Au contraire. C'est un bon moyen d'éviter que du code C se retrouve par
erreur compilé en C++, ce qui n'est un giganteste UB.
Ton argument est completement tiré par les cheveux. En l'occurrence, compiler
en C++ est souvent un bon moyen de découvrir des problèmes.
Cela ne cause pas de beugues tout de suite, mais rend le code moins
portable,et surtout moins lisible.
Portable avec quoi ?
Avec C++ justement! Si d'aventure tu devais porter des routines C dans une
appli C++, tu serais bien content de ne pas avoir à aller à la pêche aux
mots-clés.
Mais l'argument principal pour moi est la lisibilité : si le lecteur connait et
pratique le C et le C++, voire d'autres dialectes dérivés, l'utilisation de
mots-clés pour un autre usage ralentit la lecture, voire engendre de mauvaises
interprétations. C est un langage déjà suffisament subtil pour ne pas rajouter
de pièges au lecteur futur.
En l'occurrence, compiler en C++ est souvent un bon moyen de
découvrir des problèmes.
Alors je crois que tu t'avances un peu.
En l'occurrence, compiler en C++ est souvent un bon moyen de
découvrir des problèmes.
Alors je crois que tu t'avances un peu.
En l'occurrence, compiler en C++ est souvent un bon moyen de
découvrir des problèmes.
Alors je crois que tu t'avances un peu.