Affichage d'un compte à rebours

Affichage d'un compte à rebours - C - Programmation

Marsh Posté le 10-04-2006 à 18:33:05    

Voilà j'ai créé un compte à rebours avec la fonction sleep()
du genre:
 

Code :
  1. int i=30;
  2. printf("%d",i);
  3. while(i!=0)
  4. {
  5.    sleep(1000);
  6.    --i;
  7.   printf("%d",i);
  8. }


le problème c'est que d'un point de vue graphique c'est pas très jolie donc je voudrais que ce compteur en mode console soit:
1°/Fixe (ne bouge pas sur l'écran même si plusieurs ligne de saisie sont faîtes entre temps)
2°/Que le curseur de l'écran console se repositionne sur le nombre pour le remplacer par le nouveau afin de ne pas avoir toute une liste de nombres à la suite avec saut de ligne ou non.
 
Merci de votre réponse


Message édité par Omegabahamut le 10-04-2006 à 18:39:31
Reply

Marsh Posté le 10-04-2006 à 18:33:05   

Reply

Marsh Posté le 10-04-2006 à 19:36:27    

Pour le 2/

 

Tu fais

Code :
  1. printf("\r%d",i);


Enfin de mémoire ça remet le curseur en début de ligne.

Reply

Marsh Posté le 10-04-2006 à 19:47:25    

c0wb0y a écrit :


Code :
  1. printf("\r%d",i);


Enfin de mémoire ça remet le curseur en début de ligne.


Mais il faut un formatage fixe, sinon c'est laid...

Code :
  1. printf("\r%2d",i);
  2. fflush (stdout);


http://mapage.noos.fr/emdel/notes.htm#fflush_stdout


Message édité par Emmanuel Delahaye le 10-04-2006 à 19:47:49

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 10-04-2006 à 20:54:25    

Merci pour ces réponses je pensai au \r mais j'aurais voulu savoir quel est le nom du pointeur du curseur... Enfin bref,si ça marche c'est le principal :ange:  
 
Et merci pour m'avoir fait connaître fflush. Ca m'a permi de régler un problème dans mon jeu en le combinant avec stdin! :love:

Reply

Marsh Posté le 10-04-2006 à 21:09:40    

Par contre je ne vois pas l'utilité de fflush(stdout) ici, car la boucle while force automatiquement l'emmission du "contenu" de printf à chaque boucle entammée.

Reply

Marsh Posté le 10-04-2006 à 21:26:13    

Omegabahamut a écrit :

Et merci pour m'avoir fait connaître fflush. Ca m'a permi de régler un problème dans mon jeu en le combinant avec stdin! :love:


Heink ? fflush() n'a rien à voir avec stdin. Il ne fonctionnne que sur les flux sortants.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 10-04-2006 à 21:27:41    

Omegabahamut a écrit :

Par contre je ne vois pas l'utilité de fflush(stdout) ici, car la boucle while force automatiquement l'emission du "contenu" de printf à chaque boucle entammée.


Ah bon ? Comment ?
 
Tu n'as donc pas lu le lien que je t'ai passé ? Tu ne mets pas de '\n', donc l'émission n'est pas forcée.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 11-04-2006 à 01:02:52    

> fflush() n'a rien à voir avec stdin.
à mon avis il vide le buffer au début du jeu

Reply

Marsh Posté le 11-04-2006 à 01:41:25    

nargy a écrit :

> fflush() n'a rien à voir avec stdin.
à mon avis il vide le buffer au début du jeu


Ton avis importe peu. La norme dit que fflush() ne concerne que les flux sortants.  


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 11-04-2006 à 01:54:21    

> Ton avis importe peu. La norme dit que fflush() ne concerne que les flux sortants.
 
Explique donc comment faire pour vider stdin au début d'un programme.

Reply

Marsh Posté le 11-04-2006 à 01:54:21   

Reply

Marsh Posté le 11-04-2006 à 01:59:00    

nargy a écrit :

> Ton avis importe peu. La norme dit que fflush() ne concerne que les flux sortants.
Explique donc comment faire pour vider stdin au début d'un programme.


Pourquoi on ferait ça ? Il faut apprendre à utiliser correctement les fonctions de saisie, c'est tout.
 
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/notes.htm#fichiers


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 11-04-2006 à 02:07:09    

> Pourquoi on ferait ça ?
Parce que en général dans un jeu, tu ne désire pas que le joueur puisse donner des réponses à l'avance via un tube.
Dans un jeu de reflexe, tu ne désire pas non plus que quand le joueur a terminé les touches sur lesquelles il a appuyé soient prisent en compte dans le menu principal du jeu.
 
fflush(stdin) fonctionne sur certains systèmes de cette façon:

Code :
  1. void vider_clavier(void)
  2. {
  3.   char c;
  4.   while((c=fgetc(stdin))!=-1);
  5. }

Message cité 1 fois
Message édité par nargy le 11-04-2006 à 02:07:29
Reply

Marsh Posté le 11-04-2006 à 02:46:57    

nargy a écrit :

> Pourquoi on ferait ça ?
Parce que en général dans un jeu, tu ne désire pas que le joueur puisse donner des réponses à l'avance via un tube.
Dans un jeu de reflexe, tu ne désire pas non plus que quand le joueur a terminé les touches sur lesquelles il a appuyé soient prisent en compte dans le menu principal du jeu.


Quand on fait des vrais jeux (pas des exercices), je te rassure, on utilise pas du tout stdin, mais la gestion directe du clavier (conio, SDL etc.)


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 11-04-2006 à 03:39:31    

Bof, les Muds sont des vrai jeux.

Reply

Marsh Posté le 11-04-2006 à 12:22:25    

http://www-ipst.u-strasbg.fr/pat/p [...] tp99-2.htm
Voici un lien d'une université de strasbourg qui utilise fflush avec stdin, de plus je n'ai vu nul part que la norme ISO C90 interdit d'utilser fflush avec stdin, en fin bon c'est moi qui le dit!

Reply

Marsh Posté le 11-04-2006 à 12:36:41    

> ISO C90 interdit d'utilser fflush avec stdin
c'est une undocumented feature..

Reply

Marsh Posté le 11-04-2006 à 13:12:12    

Omegabahamut a écrit :

http://www-ipst.u-strasbg.fr/pat/p [...] tp99-2.htm
Voici un lien d'une université de strasbourg qui utilise fflush avec stdin,


Et ça prouve quoi ? Ce code est faux, c'est tout.

Citation :

de plus je n'ai vu nul part que la norme ISO C90 interdit d'utilser fflush avec stdin, en fin bon c'est moi qui le dit!


Le norme fonctionne comme ceci :
 
"Tout ce qui n'est pas défini est indéfini".  
 
http://www.open-std.org/JTC1/SC22/ [...] /n1124.pdf
 
Un comportement indéfini peut provoquer n'importe quoi. Si il n'est pas ecrit noir sur blanc que fflush() fonctionne sur les flux entrants, c'est que le comportement est indéfini. C'est un bug aussi grave que de déréférencer un pointeur non initialisé.
 
Or la définition de fflush() dit ceci :  

Citation :


7.19.5.2 The fflush function
Synopsis
1 #include <stdio.h>
int fflush(FILE *stream);
270 Library §7.19.5.2
WG14/N1124 Committee Draft — May 6, 2005 ISO/IEC 9899:TC2
Description
2 If stream points to an output stream or an update stream in which the most recent
operation was not input
, the fflush function causes any unwritten data for that stream
to be delivered to the host environment to be written to the file; otherwise, the behavior is
undefined.

3 If stream is a null pointer, the fflush function performs this flushing action on all
streams for which the behavior is defined above.
Returns
4 The fflush function sets the error indicator for the stream and returns EOF if a write
error occurs, otherwise it returns zero.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 11-04-2006 à 13:13:05    

nargy a écrit :

> ISO C90 interdit d'utilser fflush avec stdin
c'est une undocumented feature..


Il est clairement défini dans C99 (n1124) que le comportement est indéfini !


Message édité par Emmanuel Delahaye le 11-04-2006 à 14:05:41

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 11-04-2006 à 13:23:06    

<<otherwise, the behavior is undefined.>>
=undocumented feature

Reply

Marsh Posté le 11-04-2006 à 20:41:41    

oui, enfin on retiendra que le comportement n'est pas portable, au mieux ca marche au pir ca plante
de toute facons fflush(<flux entrant> ) n'a pas de sens comme l'a dit emmanuel, les données sont faites pour etre lues

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed