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 09/10/2014, à 01:13

Yberamos

[Résolu] Vider le buffer en C

Alors voici mon probleme: j'ai des cours de programmation et actuellement on voit le language C. Pour lire des données entrée au clavier on a vu les fonctions scanf, getchar et  autre getch. Pour utiliser correctement ces deux dernière, il vaut mieux vider le buffer du clavier. La prof nous explique donc la fonction fflush(stdin), je rentre chez moi, je test et ... ... ça fait 10h que j'essaie de vider ce p****** de buffer. Voici un de mes codes pour que vous compreniez bien le problème.

#include <stdio.h>
#include <stdlib.h>
#ifdef _WIN32			
#define CLEAR "cls"		
#else	
#define CLEAR "clear"
#include <curses.h>
#endif
 

short LireShort (short,short);
void flush();

int main()
{
    short continuer,a,b;
    do
	{
		a=LireShort(0,1);
		do
		{
			printf("Entrer une première valeur: ");
			a=LireShort(0,100);
		}while(a<0);
		do
		{
			printf("Entrer une deuxieme valeur differente de la premiere: ");
			b=LireShort(0,100);
		}while(b<0||b==a);
		
		while(a!=b)
		{
			if(a>b)
				a-=b;
			else
				b-=a;
		}
		printf("Le pgcd vaut %hd",a);
		printf("\nVoulez-vous recommencer? (0=NON, 1=OUI)");
		continuer=LireShort(0,1);
		system(CLEAR);
	}while(continuer!=0);

return 0;
}




void flush()
{
	int c;
	do
	{
		c=getch();
	}while(c!='\n'&&c!=EOF);
}

short LireShort (short nmin,short nmax)
{
    char c;
    short signe=1, i;
    int temp=0;

    do
	{
		flush();
		c = getchar();
		temp=0;

		/*Vérifie le signe avant le nombre*/

		if (c=='-')
		{
			signe=-1;
			c=getchar();
		}
		else
		{
			if(c=='+')
			{
				c=getchar();
			}
		}

		/*Boucle qui transforme les chiffres après les signes en nombre*/

		for(i=0;(c>='0' && c<='9') && i<=5; i++)
		{
			temp=temp*10+(c-48);
			c=getchar();
		}

		/*Mise du signe devant le calcul*/

		temp=temp*signe;


		/*Renvois du short /!\ casting*/
		if(temp<nmin||temp>nmax|| c!='\n')
		{
			printf("Valeur entree incorrect. Veuillez entrer une valeur entre %hd et %hd.\n",nmin,nmax);
		}
	}while(temp<nmin||temp>nmax);


    return((short)temp);

}

Donc, voila exactement mon probleme: a chaque début de programme celui-ci attend que je rentre une donnée. Toutfois, si je rentre autre chose que 0,1 ou ENTER, il me dit que c'est pas bon. Or la seul fois où je donne cette interval, c'est à la fin lorsque je demande si je dois relancer le programme...
Voila, si quelqu'un sait pourquoi c'est comme ça et comme resoudre ce bug.... (et que se soit compatible Windows ce serait épique^^)

Dernière modification par Yberamos (Le 09/10/2014, à 08:54)

Hors ligne

#2 Le 09/10/2014, à 07:42

pingouinux

Re : [Résolu] Vider le buffer en C

Bonjour,

Toutfois, si je rentre autre chose que 0,1 ou ENTER, il me dit que c'est pas bon.

Ne serait-ce pas à cause de cette ligne dans main (ligne 19 du programme) ?

                a=LireShort(0,1);

Hors ligne

#3 Le 09/10/2014, à 08:53

Yberamos

Re : [Résolu] Vider le buffer en C

J'ai honte... C'était bien cette ligne... Mais qu'est-ce qu'elle foutait la?o0 Je pense que j'ai passer trop de temps sur ce probleme. Enfin bon, normalement maintenant c'est résolu!

Hors ligne