Probleme en c

Fermé
WRIDANIOS Messages postés 24 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 11 mai 2009 - 8 avril 2008 à 16:23
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 8 avril 2008 à 19:23
Bonjour,

ce ci est un exemple de programme :
#include <stdio.h>

int main(void)
{
char ca;

do {
flushall();
ca=getchar();
if(ca!='a'); {
printf("erreur");
}
}while(ca!='a');
return 0;
}

l'affichage est le suivas lors du saisie un car != de 'a';

"erreurerreur"
.
j'explique :
le progame affiche le message "erreur" lors de la premiere saisie d'un caractaire != de 'a' puis il reboucle et affiche un 2eme message "erreur" sans attendre une saisie par le clavier ....
aucune idee pour quoi !!!!
a vous ! merci

3 réponses

Laaris Messages postés 130 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 17 juin 2011 73
8 avril 2008 à 16:34
il y a un point virgule en trop après le if mais je ne sais pas si le problème vient de là
0
WRIDANIOS Messages postés 24 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 11 mai 2009 1
8 avril 2008 à 16:41
c t just une erreur de frappe

c justement le programe que j'ai dans le compilateur...

#include <stdio.h>

int main(void)
{
char ca;

do {
ca=getchar();
if(ca!='a') {
printf("erreur");
}
}while(ca!='a');
return 0;
}

0
Laaris Messages postés 130 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 17 juin 2011 73
8 avril 2008 à 16:47
Peut-être que ton code prend le caractère "retour chariot" en compte, du coup, quand tu tapes "X" suivi de "Entrée", pour lui il y a deux caractères, donc il lit le X, affiche "erreur", re-rentre dans la boucle, lit le "retour chariot" et ré-affiche "erreur".

Mais ce n'est qu'une supposition.

Tapes "XX" pour voir s'il affiche trois fois "Erreur".
0
WRIDANIOS Messages postés 24 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 11 mai 2009 1 > Laaris Messages postés 130 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 17 juin 2011
8 avril 2008 à 16:56
oui , ça ce passe,
comment faire donc ? merci !!
0
Laaris Messages postés 130 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 17 juin 2011 73 > WRIDANIOS Messages postés 24 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 11 mai 2009
8 avril 2008 à 17:00
Essaye de remplacer le getchar par un scanf mais je ne garantis pas le résultat, ça fera peut-être pareil.
0
WRIDANIOS Messages postés 24 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 11 mai 2009 1 > Laaris Messages postés 130 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 17 juin 2011
8 avril 2008 à 17:09
c'est pareil, bon,
j'ai une solution, c'est de vider la memoir tampon avant de la saisie d'un caractaire ,
j'ai essayer d'utiliser "flushall()" avant scanf("%c",&ca) mais sa ve pas fonctionner , il maffiche l'erreur
tst3.c:9: warning: implicit declaration of function ‘flushall’
0
Laaris Messages postés 130 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 17 juin 2011 73 > WRIDANIOS Messages postés 24 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 11 mai 2009
8 avril 2008 à 17:14
Charge la bibliothèque conio.h et essaye avec getch (à la place de getchar ou scanf) normalement ça marche parce que tu n'as pas à faire "entrée" pour que ton caractère soit lu.
0
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
8 avril 2008 à 19:23
Bonjour,

Ce qu'il faut tout simplement c'est vider le buffer clavier.

Faq C sur Developpez.com : Vider le buffer clavier.

M.
0