Aller au contenu


Photo
- - - - -

soucis d'affichage - lib stdin


  • Veuillez vous connecter pour répondre
5 réponses à ce sujet

#1 philou-RX

philou-RX

    Habitué

  • Membres
  • PipPip
  • 261 messages
  • Gender:Male
  • Location:Riviera - Vaudoise

Posté 12 février 2014 - 01:57

Salut à tous

Je viens cette fois à vous, car petit soucis d'affichage dans ma fenêtre lors de l'utilisation de la lib stdio.

dans une boucle for, j'utilise les appels de fonction getchar() et putchar() ; ce que je n'arrive pas à comprendre c'est pourquoi il m'affiche deux fois un petit message que je place aussi dans cette boucle, voici le code :

    for(; c != 'Q'<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/wink.gif' class='bbc_emoticon' alt=';)' />
    {
        printf("\n  veuillez inscrire une nouvelle lettre : ");
        c = getchar();
        putchar(c);
    }

et voici ce que j'obtiens à l'écran : Image IPB

je n'arrive pas à comprendre pourquoi j'ai deux fois mon printf qui s'affiche ?

autre indication :
j'utilise codeblcoks version 12.11 avec le compilateur mingw32-gcc

Comme d'hab j'ai les yeux tout écarquiller de lire vos réponses, suggestions et autre formulations

Amitié - le cht'y Philou
Amicalement PHILOU QUI a BU, BOIRA !!! VU euh non BU! alcoolique non, assoiffé OUI^^ :P :|

#2 olivthill

olivthill

    Membre occasionnel

  • Membres
  • Pip
  • 143 messages
  • Gender:Male
  • Location:Normandie

Posté 12 février 2014 - 02:35

Ca me fait la même chose avec ce petit programme.

Le problème vient de la saisie, qui n'est pas la saisie d'un seul caractère ('5'), mais qui est en fait la saisie de deux caractères ('5' et '\n'). En plus, il est inutile de réafficher le caractère car il est affiché par défaut lors de la saisie.

Pour palier à cet inconvénient, je propose deux solutions (que j'ai testées) :

char c, d;
   for (; c != 'Q'<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/wink.gif' class='bbc_emoticon' alt=';)' />/> {
        printf("\n  veuillez inscrire une nouvelle lettre : ");
        c = getchar();
        d = getchar();
    }

char c, s[200];
   for (; c != 'Q'<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/wink.gif' class='bbc_emoticon' alt=';)' />/> {
        printf("\n  veuillez inscrire une nouvelle lettre : ");
        gets(s);
        c = s[0];
    }


#3 philou-RX

philou-RX

    Habitué

  • Membres
  • PipPip
  • 261 messages
  • Gender:Male
  • Location:Riviera - Vaudoise

Posté 13 février 2014 - 08:34

Hello Oliv,

Merci beaucoup pour ton retour, j'essaierai d'implémenter ça... par contre ca veut dire que dans le "ENTER" est pris en considération dans le flux de caractère STDIN, que ce soit avec la fonction getc() ou getchar(), si j'ai bien compris donc il faut aussi gérer ce caractère ?!? :sorry:/>

Bonne soirée à tous

--> réponse :

c'est marrant - chez moi, je reste indéfiniment dans la boucle !! pas moyen de sortir :kez_13: , une idée ?!? pourtant le code est le meme !

Amitié - Cht'y Philou
Amicalement PHILOU QUI a BU, BOIRA !!! VU euh non BU! alcoolique non, assoiffé OUI^^ :P :|

#4 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 04 mars 2014 - 06:12

De mémoire, j'utilisais encore une autre méthode pour vider le buffer clavier après une saisie.
Si je me rappelle bien, ça donnait un truc du genre :
while(getchar() != EOF);

"Tant qu'il y a des caractères dans le buffer, je boucle"

Mon site internet : http://ferdinandpiette.com/


#5 philou-RX

philou-RX

    Habitué

  • Membres
  • PipPip
  • 261 messages
  • Gender:Male
  • Location:Riviera - Vaudoise

Posté 13 mars 2014 - 01:38

hello à tous,

Alors pour les deux codes proposé par Oliv, malheureusement sur mon environnement ca marche pas, je n'ai plus qu'une seule fois l'affichage du message, mais je n'arrive plus du tout à sortit de la boucle for

Par contre, j'ai essayer la solus proposé par BT, j'obtiens le même effet qu'au départ, un double affiche de mon message à saisir... par contre je peux sortir de ma boucle, c'est ce phénomène de double affichage que je n'arrive pas à comprendre

code avec le for
for(; c != 'a'<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/wink.gif' class='bbc_emoticon' alt=';)' />
{
   printf("veuillez inscrire une nouvelle lettre : ");
   c = getchar();
}

et code avec le while
while(getchar() != 'q')
        printf("veuillez inscrire une nouvelle lettre : ");


C'est surement un cas d'école, mais je comprend pas ce phénomène... je n'ai pas tester sous un autre environnement

Encore une fois, je vous remercie de me lire, et si vous avez des bouts de pistes, c'esta vec plaisir que je les suivrai

Amitié - Le cht'y Philou
Amicalement PHILOU QUI a BU, BOIRA !!! VU euh non BU! alcoolique non, assoiffé OUI^^ :P :|

#6 ChristianR

ChristianR

    Membre passionné

  • Membres
  • PipPipPip
  • 474 messages
  • Gender:Male
  • Location:Isère (38)

Posté 13 mars 2014 - 01:49

Il doit probablement y avoir un caractère "retour chariot" invisible après la lettre saisie (touche "entrée" du clavier).
Christian




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users