Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
cpp et getchar()
Envoyé par: merlin

j'utilse la fonction native getchar()
à la fin d'un programme pour dire appuyer sur une touche pour fermer le prog

exemple:
cout<<"appuyer sur une touche pour continuer"<<endl;
getchar()

ca marche impect mais le hic
c'est qand je fais un cin avant le prog se ferme tout seule en ignorant getchar()

ex:
int nb;
cout<<"entrer nombre= ";
cin>>nb;
cout<<vous avez entrer = "<<nb<<endl;
getchar();

merci de m'indiquer la marche à suivre pour que getchar() fonctionne

Poste le Tuesday 3 August 2004 12:57:06
Répondre     Citer    
Re: cpp et getchar()
Envoyé par: Morgan

essaie de rajouter un fflush(stdin); avant getchar() pour vider le buffer du clavier, le nombre rentré avant doit rester dans ce buffer et etre lu par getchar()...



___________________________________________________
L'interface chaise-clavier se débuggue elle aussi...

Poste le Tuesday 3 August 2004 13:51:03
Répondre     Citer    
Re: cpp et getchar()
Envoyé par: Sve@r

A une certaine époque, il y avait un bug sur le "fflush(stdin)" de Linux et le buffer clavier n'était pas vidé
Peut-être qu'aujourd'hui le bug est réglé. Mais dans le cas contraire, il vaut mieux reécrire la fonction "fflush" par exemple avec la macro suivante:

#define FFLUSH_STDIN (stdin->_IO_read_ptr=NULL\,
stdin->_IO_read_end=NULL,\
stdin->_IO_read_base=NULL, \
stdin->_IO_write_ptr=NULL,\
stdin->_IO_write_end=NULL,\
stdin->_IO_write_base=NULL)

Et ensuite remplacer ton "fflush(stdin)" par "FFLUSH_STDIN"

Poste le Tuesday 3 August 2004 21:41:14
Répondre     Citer    
Re: cpp et getchar()
Envoyé par: merlin

merci

Poste le Saturday 7 August 2004 17:47:24
Répondre     Citer    
Re: cpp et getchar()
Envoyé par: Sve@r

J'ai fait une légère erreur !!!
Il ne s'agit pas d'un bug de "fflush". Si je fais un "man fflush", c'est écrit que "fflush" n'a de sens que pour les buffers de sortie (finalisation des écritures en attente).

Le problème de "merlin" est un problème que j'avais déjà eu et résolu avec mon "#define". On peut donc penser que le sujet est clos. Cependant, je trouve "anormal" d'avoir du reprogrammer un semblant de "fflush" pour résoudre ce problème. Il doit exister une solution plus "propre" que je ne connais pas...

Poste le Sunday 8 August 2004 11:12:09
Répondre     Citer    
Re: cpp et getchar()
Envoyé par: Morgan

>c'est écrit que "fflush" n'a de sens que pour les buffers de sortie

je n'ai pas ca quand je fais man fflush... "fflush force l'écriture de tous les buffers de l'espace utilisateur", donc stdin aussi, non? Je te pose la question car je n'ai jamais eu de problème avec fflush(stdin). Mais je ne suis pas non plus un spécialiste du c, loin de là...



___________________________________________________
L'interface chaise-clavier se débuggue elle aussi...

Poste le Sunday 8 August 2004 13:19:31
Répondre     Citer    
Re: cpp et getchar()
Envoyé par: Sve@r

si "fflush" force l'écriture de tous les buffers, il s'agit implicitement des buffers d'écriture. Or, stdin n'est pas un buffer d'écriture (incontournable vérité ;-).
Et comme l'instruction "fflush(stdin)" ne provoque pas d'erreur ni de warning, tu n'auras jamais de problème si tu l'utilises. Est ce que cette utilisation a un sens, c'est un autre soucis.

Maintenant, essaye donc le code suivant:
#include <stdio.h>
#define SIZE (20)

int main()
{
char chaine[SIZE + 1];
long nb=0;

do {
printf("Entre une chaîne: "); fflush(stdout);
fgets(chaine, SIZE + 1, stdin);

printf("Entre un nombre: "); fflush(stdout);
scanf("%ld", &nb);

printf("Ta chaine est [%s] et ton nombre est [%ld]\n", chaine, nb);
}while (strncmp(chaine, "EOT", 3) != 0);
return(0);
}

Tu verras que ton "fgets" n'attendra ta frappe qu'un tour sur 2. L'autre tour, il récupèrera une merde résiduelle de "stdin", sauf si tu vides stdin avant la saisie

Poste le Sunday 8 August 2004 15:06:57
Répondre     Citer    
Re: cpp et getchar()
Envoyé par: Ravachol

Salutatous,
jettez un oeil du coté de fpurge et __fpurge ces 2 fonctions ce trouvent dans stdio.h
J'ai eu le même souci que vous et je l'ai réglé avec __fpurge.

A++



------------------
Une station de métro c'est un endroit où les métro s'arrêtent, une station de taxis, c'est un endroit où les taxis s'arrêtent; sur mon bureau j'ai une station de travail...

Poste le Sunday 8 August 2004 16:13:59
Répondre     Citer    
Re: cpp et getchar()
Envoyé par: Ravachol

Petite précision fpurge n'existe pas sous Linux, voir man fpurge.



------------------
Une station de métro c'est un endroit où les métro s'arrêtent, une station de taxis, c'est un endroit où les taxis s'arrêtent; sur mon bureau j'ai une station de travail...

Poste le Sunday 8 August 2004 16:24:23
Répondre     Citer    
Re: cpp et getchar()
Envoyé par: Sve@r

Autre précision: ftagadzoum n'existe pas sous Linux, voir man ftagadzoum
:-D

Poste le Sunday 8 August 2004 19:00:37
Répondre     Citer    
Re: cpp et getchar()
Envoyé par: Sve@r

J'ai lancé ce débat sur un autre forum. Les réponses se sont déchaînées.
[forum.hardware.fr]

Attention, ce forum est nettement moins sympa que celui de lea-linux...

Poste le Sunday 8 August 2004 20:04:44
Répondre     Citer    
Re: cpp et getchar()
Envoyé par: Ravachol

Tu devrais vérifier le nom des pages de manuel avant de poster ;-p
En effet man ftagadzoum renvoi :
-- Il n'y a pas de page de manuel pour ftagadzoum. --

Alors que nam fpurge renvoi (extrait) :
FPURGE(3) Manuel du programmeur Linux FPURGE(3)

NOM
fpurge, __fpurge - Purger un flux

SYNOPSIS
/* non supporté */
#include <stdio.h>

int fpurge(FILE *stream);

/* supporté */
#include <stdio.h>
#include <stdio_ext.h>

void __fpurge(FILE *stream);

DESCRIPTION
La fonction fpurge() efface les tampons d'un flux donné. Pour les flux
de sortie, on se débarrasse de toute sortie n'ayant pas encore été
écrite. Pour les flux d'entrée, on renonce à toute entrée lue par
l'objet sous-jacent mais n'ayant pas encore été acquise par getc(3);
Cela inclut tout texte ré-injecté dans le flux par ungetc(). Voir aussi
fflush(3).

^^D-*



------------------
Une station de métro c'est un endroit où les métro s'arrêtent, une station de taxis, c'est un endroit où les taxis s'arrêtent; sur mon bureau j'ai une station de travail...

Poste le Monday 9 August 2004 08:30:33
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
cpp et getchar()
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons