street_pc
Messages postés9Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention18 octobre 2004 18 oct. 2004 à 18:34
Merci pour toutes ces précisions, je retindrai quand j'aurai besoin d'un code portable.
En attendant, les puristes peuvent toujours refaire ce code de façon portable et aux normes, toute belle, sans erreurs, etc.
Prévenez-moi si vous déposez une meilleur source du même programme, que je supprime celle-ci...
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 18 oct. 2004 à 11:49
ce qu'il faut comprendre c'est que les données d'un flux d'entré sont faites pour etre lues, donc vider le tampon associé c'est forcement une erreur de logique, d'autant plus que le standard ne definie aucun mode de bufferisation donc tu ne peux pas savoir a priori ce que tu vides, ce que tu perds
while( (c = fgetc( stdin )) != EOF && c != '\n' ); est une solution portable pour sauter tous les caracteres lu jusqu'a un '\n'
pour les saisie, le meilleur moyen de tout lire en sécurité est fgets + tableau + sizeof
street_pc
Messages postés9Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention18 octobre 2004 17 oct. 2004 à 14:59
ce code n'a aucune prétention en tant que source.
je l'ai codé à l'arrache en tant qu'utilitaire pour développeurs Dev-Cpp ou Borland sous Windows, je sais qu'il n' aucune portabilité, qu'il ne respecte aucune norme, etc.
mes programmes qui respectent une norme sont ceux que je fais en cours.
pour le zip, je ne préfère pas proposer un zip avec un exe comme je le faisais avant (manque justifié de confiace).
pour ceux qui veulent reprendre le code pour le rendre protable et aux normes, c'est avec plaisir que je remplacerai ce code par le leur (en indiquant leur nom bien sur) ou que je suprimerai celui-ci dès qu'un équivalent bien codé sera proposé sur cppfrance.
[BlackGoddess]
fflush(stdin); >> ceci est une faute logique : en effet stdin est en lecteur, tu ne peux donc normalement pas le modifier.
/BlackGoddess exprime-toi plus clairement car il ne s'agit pas dune faute de logique. il n'a peut-être rien à faire ici mais il était bien pratique après un scanf("%c", ...) :D
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 15 oct. 2004 à 10:48
+1
pour les i/o c et c++, c'est dangereux et encore heureux que c'est synchros par defaut d'apres le standard, mais ca faut le savoir
en fait ya plusieurs erreurs de logique la, scanf et getch n'ont strictement rien a voir, getch lit le clavier et scanf stdin, et un fflush(stdin) apres un getch() n'a aucun sens
fflush(stdin) n'a aucune portabilité et est tres dangereux, le standard ne defini pas de comportement lorsque fflush recoit un flux d'entrée
on inclus jamais un .c, c'est anti productif
unsigned char c'est un entier non signé en c, pas la peine de caster inutilement
BlackGoddess
Messages postés338Date d'inscriptionjeudi 22 août 2002StatutMembreDernière intervention14 juin 2005 15 oct. 2004 à 09:33
du C avec des cout :o
je crois que conio.c n'est pas portable, et n'existe pas sur tout les compilo win.
sinon, il est mauvais de melanger les flux d'e/s du C et ceux du C++ (ils n'ont pas le meme fonctionnement interne, il faut s'attendre a des surprises ...)
fflush(stdin); >> ceci est une faute logique : en effet stdin est en lecteur, tu ne peux donc normalement pas le modifier.
asmanur
Messages postés230Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 4 août 2005 15 oct. 2004 à 07:29
J'au un peu regarder le code plusoeurs conseils:
-divise ton code en fonction pacre qu'utilisez des goto c bon pour le Basic mais pas pour le C++
-Si tu pouvais mettre un zip avec un exe ce serait plus pratique
Sinon j'ai pas eu le temps de tester a source.
18 oct. 2004 à 18:34
En attendant, les puristes peuvent toujours refaire ce code de façon portable et aux normes, toute belle, sans erreurs, etc.
Prévenez-moi si vous déposez une meilleur source du même programme, que je supprime celle-ci...
18 oct. 2004 à 11:49
while( (c = fgetc( stdin )) != EOF && c != '\n' ); est une solution portable pour sauter tous les caracteres lu jusqu'a un '\n'
pour les saisie, le meilleur moyen de tout lire en sécurité est fgets + tableau + sizeof
17 oct. 2004 à 14:59
je l'ai codé à l'arrache en tant qu'utilitaire pour développeurs Dev-Cpp ou Borland sous Windows, je sais qu'il n' aucune portabilité, qu'il ne respecte aucune norme, etc.
mes programmes qui respectent une norme sont ceux que je fais en cours.
pour le zip, je ne préfère pas proposer un zip avec un exe comme je le faisais avant (manque justifié de confiace).
pour ceux qui veulent reprendre le code pour le rendre protable et aux normes, c'est avec plaisir que je remplacerai ce code par le leur (en indiquant leur nom bien sur) ou que je suprimerai celui-ci dès qu'un équivalent bien codé sera proposé sur cppfrance.
[BlackGoddess]
fflush(stdin); >> ceci est une faute logique : en effet stdin est en lecteur, tu ne peux donc normalement pas le modifier.
/BlackGoddess
exprime-toi plus clairement car il ne s'agit pas dune faute de logique. il n'a peut-être rien à faire ici mais il était bien pratique après un scanf("%c", ...) :D
15 oct. 2004 à 10:48
pour les i/o c et c++, c'est dangereux et encore heureux que c'est synchros par defaut d'apres le standard, mais ca faut le savoir
//anciennement: scanf("%u", &cChoice);
cChoice = getch();
fflush(stdin);
en fait ya plusieurs erreurs de logique la, scanf et getch n'ont strictement rien a voir, getch lit le clavier et scanf stdin, et un fflush(stdin) apres un getch() n'a aucun sens
fflush(stdin) n'a aucune portabilité et est tres dangereux, le standard ne defini pas de comportement lorsque fflush recoit un flux d'entrée
on inclus jamais un .c, c'est anti productif
unsigned char c'est un entier non signé en c, pas la peine de caster inutilement
15 oct. 2004 à 09:33
je crois que conio.c n'est pas portable, et n'existe pas sur tout les compilo win.
sinon, il est mauvais de melanger les flux d'e/s du C et ceux du C++ (ils n'ont pas le meme fonctionnement interne, il faut s'attendre a des surprises ...)
fflush(stdin); >> ceci est une faute logique : en effet stdin est en lecteur, tu ne peux donc normalement pas le modifier.
15 oct. 2004 à 07:29
-divise ton code en fonction pacre qu'utilisez des goto c bon pour le Basic mais pas pour le C++
-Si tu pouvais mettre un zip avec un exe ce serait plus pratique
Sinon j'ai pas eu le temps de tester a source.