In article .com>,
Beware wrote:
>Est-ce qu'une macro qui me permette de remplacer ces deux lignes est
>une chose "orthodoxe" ou pas? Du genre :
>#define PRINT(chaine) printf("%s", chaine);
> ffl ush(stdout);
>et ensuite utiliser PRINT quand j'en ai besoin.
>La question peut vous paraitre bete, mais comme je n'ai jamais utilisé
>les macros je me demande.
Tu n'as jamais utilise les macros: c'est bien, ne commence pas.
Dans ce cas precis, ca n'apporte rien en lisibilite, bien au contraire.
Si tu veux ecrire une fonction, n'hesite pas. Tu peux la marquer comme
etant inline en C99, ce qui te donnera tous les benefices de la macro,
sans aucun de ses inconvenients...
In article <eef8e67a-c502-4999-9d19-00df94e26...@y13g2000yqn.googlegroups .com>,
Beware <mathieu.hed...@gmail.com> wrote:
>Est-ce qu'une macro qui me permette de remplacer ces deux lignes est
>une chose "orthodoxe" ou pas? Du genre :
>#define PRINT(chaine) printf("%s", chaine);
> ffl ush(stdout);
>et ensuite utiliser PRINT quand j'en ai besoin.
>La question peut vous paraitre bete, mais comme je n'ai jamais utilisé
>les macros je me demande.
Tu n'as jamais utilise les macros: c'est bien, ne commence pas.
Dans ce cas precis, ca n'apporte rien en lisibilite, bien au contraire.
Si tu veux ecrire une fonction, n'hesite pas. Tu peux la marquer comme
etant inline en C99, ce qui te donnera tous les benefices de la macro,
sans aucun de ses inconvenients...
In article .com>,
Beware wrote:
>Est-ce qu'une macro qui me permette de remplacer ces deux lignes est
>une chose "orthodoxe" ou pas? Du genre :
>#define PRINT(chaine) printf("%s", chaine);
> ffl ush(stdout);
>et ensuite utiliser PRINT quand j'en ai besoin.
>La question peut vous paraitre bete, mais comme je n'ai jamais utilisé
>les macros je me demande.
Tu n'as jamais utilise les macros: c'est bien, ne commence pas.
Dans ce cas precis, ca n'apporte rien en lisibilite, bien au contraire.
Si tu veux ecrire une fonction, n'hesite pas. Tu peux la marquer comme
etant inline en C99, ce qui te donnera tous les benefices de la macro,
sans aucun de ses inconvenients...
Juste une question pour ma culture personnelle. Est-on sûr que
quelque chose va s'afficher lorsque l'argument du printf() contient un
retour à la ligne ? Je me souviens avoir dû coller une macro du type
Juste une question pour ma culture personnelle. Est-on sûr que
quelque chose va s'afficher lorsque l'argument du printf() contient un
retour à la ligne ? Je me souviens avoir dû coller une macro du type
Juste une question pour ma culture personnelle. Est-on sûr que
quelque chose va s'afficher lorsque l'argument du printf() contient un
retour à la ligne ? Je me souviens avoir dû coller une macro du type
In article
, Beware
wrote:Est-ce qu'une macro qui me permette de remplacer ces deux lignes est
une chose "orthodoxe" ou pas? Du genre :
#define PRINT(chaine) printf("%s", chaine);
fflush(stdout);
et ensuite utiliser PRINT quand j'en ai besoin.
La question peut vous paraitre bete, mais comme je n'ai jamais utilisé
les macros je me demande.
Tu n'as jamais utilise les macros: c'est bien, ne commence pas.
Dans ce cas precis, ca n'apporte rien en lisibilite, bien au contraire.
Si tu veux ecrire une fonction, n'hesite pas. Tu peux la marquer comme
etant inline en C99, ce qui te donnera tous les benefices de la macro,
sans aucun de ses inconvenients...
In article
<eef8e67a-c502-4999-9d19-00df94e26f16@y13g2000yqn.googlegroups.com>, Beware
<mathieu.hedard@gmail.com> wrote:
Est-ce qu'une macro qui me permette de remplacer ces deux lignes est
une chose "orthodoxe" ou pas? Du genre :
#define PRINT(chaine) printf("%s", chaine);
fflush(stdout);
et ensuite utiliser PRINT quand j'en ai besoin.
La question peut vous paraitre bete, mais comme je n'ai jamais utilisé
les macros je me demande.
Tu n'as jamais utilise les macros: c'est bien, ne commence pas.
Dans ce cas precis, ca n'apporte rien en lisibilite, bien au contraire.
Si tu veux ecrire une fonction, n'hesite pas. Tu peux la marquer comme
etant inline en C99, ce qui te donnera tous les benefices de la macro,
sans aucun de ses inconvenients...
In article
, Beware
wrote:Est-ce qu'une macro qui me permette de remplacer ces deux lignes est
une chose "orthodoxe" ou pas? Du genre :
#define PRINT(chaine) printf("%s", chaine);
fflush(stdout);
et ensuite utiliser PRINT quand j'en ai besoin.
La question peut vous paraitre bete, mais comme je n'ai jamais utilisé
les macros je me demande.
Tu n'as jamais utilise les macros: c'est bien, ne commence pas.
Dans ce cas precis, ca n'apporte rien en lisibilite, bien au contraire.
Si tu veux ecrire une fonction, n'hesite pas. Tu peux la marquer comme
etant inline en C99, ce qui te donnera tous les benefices de la macro,
sans aucun de ses inconvenients...
Alors commençons par un retour sur certaines de vos remarques :
En fait, pour certains commentaire, j'avoue qu'ils sont plus une
aide pour moi qu'un veritable apport à la lecture du code.
- les parentheses de:
((etat_rejouer == REJOUER_MENU) || (etat_rejouer == REJOUER_NORMAL))
sont inutiles.
Tu as raison, c'est peut etre bete, mais je vois mieux les conditions
comme ca.
char lettre;
Un variable de type char est le plus souvent mal typée. En C, une
constante caractère (comme 'a') a pour type int, et ce devrait être le
cas pour les variables qui contiennent des choses similaires. Il y a de
très bonnes raisons (en particulier de pouvoir coder EOF, et de ne pas
perdre bêtement les caractères accentués pour des questions de signe)
pour cela, et le fait d'utiliser char n'a aucun intérêt pratique (cela
ne gagne rien).
Je ne comprends pas cette remarque, il faut que je modifie mes char en
int?
/* Le jeu se deroule tant que le joueur veut rejouer */
do {
...
else if (choix_menu == 3) {
affichage(...);
return (0);
...
}
while((etat_rejouer == REJOUER_MENU) ...
return 0;
Cette boucle est beaucoup trop longue. De plus, la logique de sortie est
trop complexe, c'est en partie lié à l'existence de deux variables,
etat_rejouer et choix_menu. En fait, le return(0) est assez horrible,
c'est un saut déguisé, qui montre un problème de conception général de
l'algorithme qui n'a pas été assez poussée.
La boucle est longue car elle gere le deroulement d'une partie. Et
doit se repeter autant de fois que le joueur a envie de rejouer.
while (motJoue[indice_tableau] != ' ') {
printf(" %c", motJoue[indice_tableau]);
indice_tableau++;
}
En C, cela s'écrit
printf(" %s", motJoue);
Oui je sais bien. En fait j'ai utilisé - a tort? - cette facon de
faire pour une
raison simple, en utilisant %s j'aurais eu **** alors que je voulais
* * * *.
Permettre 4 caractères est une intéressante initiative
(en effet, des lettres comme Œ ou Ç peuvent occuper plusieurs bytes;
mais on préferera MBLEN_MAX), mais elle est n'est pas exploitée par la
suite ; l'utilisation de sscanf est sujette à erreur, par exemple ici si
l'utilisateur tape un espace au début cela va être utilisé comme
proposition...
Quel est l'utilisation de MBLEN_MAX?
printf( "nt Vous avez perdu. Le mot a trouver etait : %s",
On peut utiliser sans souci les accents dans les messages (sauf si on
s'appelle Marc E. et que l'on travaille sur des terminaux zarbi), c'est
quand même plus lisible.
J'aimerais bien, mais sous la console windows j'ai que des erreurs
d'affichages.
Alors commençons par un retour sur certaines de vos remarques :
En fait, pour certains commentaire, j'avoue qu'ils sont plus une
aide pour moi qu'un veritable apport à la lecture du code.
- les parentheses de:
((etat_rejouer == REJOUER_MENU) || (etat_rejouer == REJOUER_NORMAL))
sont inutiles.
Tu as raison, c'est peut etre bete, mais je vois mieux les conditions
comme ca.
char lettre;
Un variable de type char est le plus souvent mal typée. En C, une
constante caractère (comme 'a') a pour type int, et ce devrait être le
cas pour les variables qui contiennent des choses similaires. Il y a de
très bonnes raisons (en particulier de pouvoir coder EOF, et de ne pas
perdre bêtement les caractères accentués pour des questions de signe)
pour cela, et le fait d'utiliser char n'a aucun intérêt pratique (cela
ne gagne rien).
Je ne comprends pas cette remarque, il faut que je modifie mes char en
int?
/* Le jeu se deroule tant que le joueur veut rejouer */
do {
...
else if (choix_menu == 3) {
affichage(...);
return (0);
...
}
while((etat_rejouer == REJOUER_MENU) ...
return 0;
Cette boucle est beaucoup trop longue. De plus, la logique de sortie est
trop complexe, c'est en partie lié à l'existence de deux variables,
etat_rejouer et choix_menu. En fait, le return(0) est assez horrible,
c'est un saut déguisé, qui montre un problème de conception général de
l'algorithme qui n'a pas été assez poussée.
La boucle est longue car elle gere le deroulement d'une partie. Et
doit se repeter autant de fois que le joueur a envie de rejouer.
while (motJoue[indice_tableau] != ' ') {
printf(" %c", motJoue[indice_tableau]);
indice_tableau++;
}
En C, cela s'écrit
printf(" %s", motJoue);
Oui je sais bien. En fait j'ai utilisé - a tort? - cette facon de
faire pour une
raison simple, en utilisant %s j'aurais eu **** alors que je voulais
* * * *.
Permettre 4 caractères est une intéressante initiative
(en effet, des lettres comme Œ ou Ç peuvent occuper plusieurs bytes;
mais on préferera MBLEN_MAX), mais elle est n'est pas exploitée par la
suite ; l'utilisation de sscanf est sujette à erreur, par exemple ici si
l'utilisateur tape un espace au début cela va être utilisé comme
proposition...
Quel est l'utilisation de MBLEN_MAX?
printf( "nt Vous avez perdu. Le mot a trouver etait : %s",
On peut utiliser sans souci les accents dans les messages (sauf si on
s'appelle Marc E. et que l'on travaille sur des terminaux zarbi), c'est
quand même plus lisible.
J'aimerais bien, mais sous la console windows j'ai que des erreurs
d'affichages.
Alors commençons par un retour sur certaines de vos remarques :
En fait, pour certains commentaire, j'avoue qu'ils sont plus une
aide pour moi qu'un veritable apport à la lecture du code.
- les parentheses de:
((etat_rejouer == REJOUER_MENU) || (etat_rejouer == REJOUER_NORMAL))
sont inutiles.
Tu as raison, c'est peut etre bete, mais je vois mieux les conditions
comme ca.
char lettre;
Un variable de type char est le plus souvent mal typée. En C, une
constante caractère (comme 'a') a pour type int, et ce devrait être le
cas pour les variables qui contiennent des choses similaires. Il y a de
très bonnes raisons (en particulier de pouvoir coder EOF, et de ne pas
perdre bêtement les caractères accentués pour des questions de signe)
pour cela, et le fait d'utiliser char n'a aucun intérêt pratique (cela
ne gagne rien).
Je ne comprends pas cette remarque, il faut que je modifie mes char en
int?
/* Le jeu se deroule tant que le joueur veut rejouer */
do {
...
else if (choix_menu == 3) {
affichage(...);
return (0);
...
}
while((etat_rejouer == REJOUER_MENU) ...
return 0;
Cette boucle est beaucoup trop longue. De plus, la logique de sortie est
trop complexe, c'est en partie lié à l'existence de deux variables,
etat_rejouer et choix_menu. En fait, le return(0) est assez horrible,
c'est un saut déguisé, qui montre un problème de conception général de
l'algorithme qui n'a pas été assez poussée.
La boucle est longue car elle gere le deroulement d'une partie. Et
doit se repeter autant de fois que le joueur a envie de rejouer.
while (motJoue[indice_tableau] != ' ') {
printf(" %c", motJoue[indice_tableau]);
indice_tableau++;
}
En C, cela s'écrit
printf(" %s", motJoue);
Oui je sais bien. En fait j'ai utilisé - a tort? - cette facon de
faire pour une
raison simple, en utilisant %s j'aurais eu **** alors que je voulais
* * * *.
Permettre 4 caractères est une intéressante initiative
(en effet, des lettres comme Œ ou Ç peuvent occuper plusieurs bytes;
mais on préferera MBLEN_MAX), mais elle est n'est pas exploitée par la
suite ; l'utilisation de sscanf est sujette à erreur, par exemple ici si
l'utilisateur tape un espace au début cela va être utilisé comme
proposition...
Quel est l'utilisation de MBLEN_MAX?
printf( "nt Vous avez perdu. Le mot a trouver etait : %s",
On peut utiliser sans souci les accents dans les messages (sauf si on
s'appelle Marc E. et que l'on travaille sur des terminaux zarbi), c'est
quand même plus lisible.
J'aimerais bien, mais sous la console windows j'ai que des erreurs
d'affichages.
Le 15-03-2009, à propos de
Re: 1er programme, j'aimerais vos commentaires.,
Marc Espie écrivait dans fr.comp.lang.c :Si tu veux afficher des lignes incompletes, il faut rajouter un appel a
fflush:
printf("Entrez votre valeur: ");
fflush(stdout);
Juste une question pour ma culture personnelle. Est-on sûr que
quelque chose va s'afficher lorsque l'argument du printf() contient un
retour à la ligne ?
Le 15-03-2009, à propos de
Re: 1er programme, j'aimerais vos commentaires.,
Marc Espie écrivait dans fr.comp.lang.c :
Si tu veux afficher des lignes incompletes, il faut rajouter un appel a
fflush:
printf("Entrez votre valeur: ");
fflush(stdout);
Juste une question pour ma culture personnelle. Est-on sûr que
quelque chose va s'afficher lorsque l'argument du printf() contient un
retour à la ligne ?
Le 15-03-2009, à propos de
Re: 1er programme, j'aimerais vos commentaires.,
Marc Espie écrivait dans fr.comp.lang.c :Si tu veux afficher des lignes incompletes, il faut rajouter un appel a
fflush:
printf("Entrez votre valeur: ");
fflush(stdout);
Juste une question pour ma culture personnelle. Est-on sûr que
quelque chose va s'afficher lorsque l'argument du printf() contient un
retour à la ligne ?
Est-ce qu'une macro qui me permette de remplacer ces deux lignes est
une chose "orthodoxe" ou pas? Du genre :
#define PRINT(chaine) printf("%s", chaine);
fflush(stdout);
Est-ce qu'une macro qui me permette de remplacer ces deux lignes est
une chose "orthodoxe" ou pas? Du genre :
#define PRINT(chaine) printf("%s", chaine);
fflush(stdout);
Est-ce qu'une macro qui me permette de remplacer ces deux lignes est
une chose "orthodoxe" ou pas? Du genre :
#define PRINT(chaine) printf("%s", chaine);
fflush(stdout);
Le 15/03/2009 18:37, JKB écrivit :Le 15-03-2009, à propos de
Re: 1er programme, j'aimerais vos commentaires.,
Marc Espie écrivait dans fr.comp.lang.c :Si tu veux afficher des lignes incompletes, il faut rajouter un appel a
fflush:
printf("Entrez votre valeur: ");
fflush(stdout);
Juste une question pour ma culture personnelle. Est-on sûr que
quelque chose va s'afficher lorsque l'argument du printf() contient un
retour à la ligne ?
man setvbuf, regarder _IOLBF et _IOFBF
Et savoir que « normalement », stdout est positionné en mode _IOLBF
_sauf_ si la bibliothèque est sûre que le flux est redirigé vers autre
chose qu'un dispositif interactif, auquel cas stdout (peut) est mis en
mode _IOFBF.
Voir alors man isatty (Posix)
stderr pour sa part est en mode _IONBF, et c'est une catastrophe en
terme de perfs (genre le programme se traîne à mettre à jour l'écran
caractère par caractère, en général l'indice c'est quand le programme
accélère quand on cache la fenêtre...)
Le 15/03/2009 18:37, JKB écrivit :
Le 15-03-2009, à propos de
Re: 1er programme, j'aimerais vos commentaires.,
Marc Espie écrivait dans fr.comp.lang.c :
Si tu veux afficher des lignes incompletes, il faut rajouter un appel a
fflush:
printf("Entrez votre valeur: ");
fflush(stdout);
Juste une question pour ma culture personnelle. Est-on sûr que
quelque chose va s'afficher lorsque l'argument du printf() contient un
retour à la ligne ?
man setvbuf, regarder _IOLBF et _IOFBF
Et savoir que « normalement », stdout est positionné en mode _IOLBF
_sauf_ si la bibliothèque est sûre que le flux est redirigé vers autre
chose qu'un dispositif interactif, auquel cas stdout (peut) est mis en
mode _IOFBF.
Voir alors man isatty (Posix)
stderr pour sa part est en mode _IONBF, et c'est une catastrophe en
terme de perfs (genre le programme se traîne à mettre à jour l'écran
caractère par caractère, en général l'indice c'est quand le programme
accélère quand on cache la fenêtre...)
Le 15/03/2009 18:37, JKB écrivit :Le 15-03-2009, à propos de
Re: 1er programme, j'aimerais vos commentaires.,
Marc Espie écrivait dans fr.comp.lang.c :Si tu veux afficher des lignes incompletes, il faut rajouter un appel a
fflush:
printf("Entrez votre valeur: ");
fflush(stdout);
Juste une question pour ma culture personnelle. Est-on sûr que
quelque chose va s'afficher lorsque l'argument du printf() contient un
retour à la ligne ?
man setvbuf, regarder _IOLBF et _IOFBF
Et savoir que « normalement », stdout est positionné en mode _IOLBF
_sauf_ si la bibliothèque est sûre que le flux est redirigé vers autre
chose qu'un dispositif interactif, auquel cas stdout (peut) est mis en
mode _IOFBF.
Voir alors man isatty (Posix)
stderr pour sa part est en mode _IONBF, et c'est une catastrophe en
terme de perfs (genre le programme se traîne à mettre à jour l'écran
caractère par caractère, en général l'indice c'est quand le programme
accélère quand on cache la fenêtre...)
Beware wrote:Est-ce qu'une macro qui me permette de remplacer ces deux lignes est
une chose "orthodoxe" ou pas? Du genre :
#define PRINT(chaine) printf("%s", chaine);
fflush(stdout);
puts(chaine) ;
Beware wrote:
Est-ce qu'une macro qui me permette de remplacer ces deux lignes est
une chose "orthodoxe" ou pas? Du genre :
#define PRINT(chaine) printf("%s", chaine);
fflush(stdout);
puts(chaine) ;
Beware wrote:Est-ce qu'une macro qui me permette de remplacer ces deux lignes est
une chose "orthodoxe" ou pas? Du genre :
#define PRINT(chaine) printf("%s", chaine);
fflush(stdout);
puts(chaine) ;
Oui, sauf que ca ne fait pas la meme chose. C'est genant quand meme...
Oui, sauf que ca ne fait pas la meme chose. C'est genant quand meme...
Oui, sauf que ca ne fait pas la meme chose. C'est genant quand meme...