Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1381 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Affichage d'un compte à rebours

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Affichage d'un compte à rebours

n°1343430
Omegabaham​ut
Posté le 10-04-2006 à 18:33:05  profilanswer
 

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
mood
Publicité
Posté le 10-04-2006 à 18:33:05  profilanswer
 

n°1343466
c0wb0y
:d
Posté le 10-04-2006 à 19:36:27  profilanswer
 

Pour le 2/

 

Tu fais

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


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

n°1343472
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-04-2006 à 19:47:25  profilanswer
 

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/
n°1343527
Omegabaham​ut
Posté le 10-04-2006 à 20:54:25  profilanswer
 

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:

n°1343542
Omegabaham​ut
Posté le 10-04-2006 à 21:09:40  profilanswer
 

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.

n°1343560
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-04-2006 à 21:26:13  profilanswer
 

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/
n°1343561
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-04-2006 à 21:27:41  profilanswer
 

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/
n°1343726
nargy
Posté le 11-04-2006 à 01:02:52  profilanswer
 

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

n°1343729
Emmanuel D​elahaye
C is a sharp tool
Posté le 11-04-2006 à 01:41:25  profilanswer
 

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/
n°1343732
nargy
Posté le 11-04-2006 à 01:54:21  profilanswer
 

> 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.

mood
Publicité
Posté le 11-04-2006 à 01:54:21  profilanswer
 

n°1343734
Emmanuel D​elahaye
C is a sharp tool
Posté le 11-04-2006 à 01:59:00  profilanswer
 

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/
n°1343737
nargy
Posté le 11-04-2006 à 02:07:09  profilanswer
 

> 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
n°1343741
Emmanuel D​elahaye
C is a sharp tool
Posté le 11-04-2006 à 02:46:57  profilanswer
 

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/
n°1343745
nargy
Posté le 11-04-2006 à 03:39:31  profilanswer
 

Bof, les Muds sont des vrai jeux.

n°1343989
Omegabaham​ut
Posté le 11-04-2006 à 12:22:25  profilanswer
 

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!

n°1344004
nargy
Posté le 11-04-2006 à 12:36:41  profilanswer
 

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

n°1344035
Emmanuel D​elahaye
C is a sharp tool
Posté le 11-04-2006 à 13:12:12  profilanswer
 

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/
n°1344036
Emmanuel D​elahaye
C is a sharp tool
Posté le 11-04-2006 à 13:13:05  profilanswer
 

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/
n°1344053
nargy
Posté le 11-04-2006 à 13:23:06  profilanswer
 

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

n°1344464
skelter
Posté le 11-04-2006 à 20:41:41  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Affichage d'un compte à rebours

 

Sujets relatifs
probleme de rafraichissement de l affichage sous firefox[struts-layout]Affichage d'un select
Affichage d'une matriceAffichage fichier .vrml sous Borland
ouvrir un lien avec compte a rebourd[resolu]pb affichage input avec IE et firefox
probleme affichage php/html (simple)probleme affichage du dernier passage
forcer l'affichage sur plusieurs digits 
Plus de sujets relatifs à : Affichage d'un compte à rebours


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR