Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/04/2008, à 15:52

wardi

problem en programmation c

Bonjour,

ce ci est un exemple de programme , compilateur Geany sous linux ubuntu 7.10 :



#include <stdio.h>

int main(void)
{
char ca;

do {
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

#2 Le 08/04/2008, à 16:37

rniamo

Re : problem en programmation c

#include <stdio.h>

int main(void)
{
	char ca;

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

< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#3 Le 08/04/2008, à 16:39

nicolas.sitbon

Re : problem en programmation c

wardi a écrit :

Bonjour,
ce ci est un exemple de programme , compilateur Geany sous linux ubuntu 7.10 :

Geany n'est pas un compilateur mais un éditeur de texte.
Pense à utiliser la balise Code.

#include <stdio.h>

int main (void)
{
   char ca;

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

   return 0;
}
wardi a écrit :

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

erreurerreur

C'est du français ça?

wardi a écrit :

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

Oui c'est un comportement normal, puisque tu appuies sur 2 touches : le caractère + Entrée, donc il faut retirer Entrée du buffer.

#include <stdio.h>

int main (void)
{
   char ca;
   int tmp;

   do 
   {
      ca = getchar ();
      while (tmp = getchar () != '\n' && tmp != EOF);

      if (ca != 'a')
      {
          printf ("erreur");
      }
   }while (ca != 'a');

   return 0;
}

ou

#include <stdio.h>

int main (void)
{
   char ca;
   int tmp;

   do 
   {
      ca = getchar ();
      scanf ("%*[^\n]"), getchar ();

      if (ca != 'a')
      {
          printf ("erreur");
      }
   }while (ca != 'a');

   return 0;
}

Cordialement.

Hors ligne

#4 Le 08/04/2008, à 17:30

wardi

Re : problem en programmation c

Merci bien sa fonctionne , mais je ve utiliser flashall() dans cetain programmes ,le probleme est que flashall() n'est pas reconnue dans stdio.h , Des suggession????

#5 Le 08/04/2008, à 17:39

nicolas.sitbon

Re : problem en programmation c

Je t'ai montré les 2 manières standards et portable pour vider le buffer.
flashall() inconnu au bataillon et certainement pas standard ni portable.

Hors ligne

#6 Le 08/04/2008, à 17:43

wardi

Re : problem en programmation c

nicolas.sitbon a écrit :

Je t'ai montré les 2 manières standards et portable pour vider le buffer.
flashall() inconnu au bataillon et certainement pas standard ni portable.

merci bien c'est tres  gentille de vous ,

#7 Le 08/04/2008, à 18:20

MCMic

Re : problem en programmation c

nicolas.sitbon a écrit :
wardi a écrit :

Bonjour,
ce ci est un exemple de programme , compilateur Geany sous linux ubuntu 7.10 :

Geany n'est pas un compilateur mais un éditeur de texte.

certes, mais il propose effectivement un bouton compiler qu'il lance une commande (personnalisable) en fonction du nom du fichier. (perso en général j'indique le chemin du makefile à ce bouton)

Hors ligne

#8 Le 08/04/2008, à 19:07

LittleWhite

Re : problem en programmation c

Moi dans le genre je connait que fflush

a utiliser :
          fflush(stdout);
pour cette fois
mais je ne pense pas que cela serve


Linux ou mourir
Pour avoir des problemes : demarrer Windows
Script de compression multi archive : http://forum.ubuntu-fr.org/viewtopic.php?id=225297

Hors ligne

#9 Le 08/04/2008, à 19:19

nicolas.sitbon

Re : problem en programmation c

Non cela ne sert à rien dans ce cas

Hors ligne

#10 Le 08/04/2008, à 22:45

LittleWhite

Re : problem en programmation c

oui c'est bien ce que je me disais mais comme on parlait d'un truc comme flashall ( que je ne connait pas ) je me suis dit qu'il y avait peut etre un rapprochement à faire.


Linux ou mourir
Pour avoir des problemes : demarrer Windows
Script de compression multi archive : http://forum.ubuntu-fr.org/viewtopic.php?id=225297

Hors ligne

#11 Le 09/04/2008, à 08:23

Karl_le_rouge

Re : problem en programmation c

fflush sert uniquement à vider le buffer de sortie (stdout) et en aucun cas le buffer d'entrée (stdin) -ce n'est pas prévu par le standard ANSI- comme le souhaite l'ami.

Hors ligne

#12 Le 09/04/2008, à 12:41

wardi

Re : problem en programmation c

Bonjour,
j'ai teste aussi de fair un getchar() avant la fonction saisie , getchar() pourrait absorber le retour chariot de la saisie precedente
mais ce n'est pas toujour efficace....