Probleme dans les piles

Résolu/Fermé
abdess111 Messages postés 40 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 mai 2008 - 9 mars 2008 à 16:55
abdess111 Messages postés 40 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 mai 2008 - 10 mars 2008 à 10:43
bonjour
jai un probleme cest que je veux creer une pile qui contiens des donnée,les donnée seront entrés par clavier
le probleme cest que jai crée une fonction qui te pose une question (voulez vous continuer?(o/n) si tu tape le o il va te donner la mein si nn il sort
voila la fonction(il retourne 1 ou 0)
_____________________________________________________
int teste()
{
int v;
char t;
printf("voulez vous continuer?(o/n):\t");
scanf("%c",&t);
if(t=='o' || t=='O')
v=1;
if(t=='n' || t=='N')
v=0;
return v;
}
_____________________________________________________il marche bien tt seule
mais qd je letulise dans la pile il retourne pas 0 ou 1 il retourne une adraisse !!!!!!!
___________________________________________________________________
voila la structure
_________________________________________________________________
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct rationnel{
int a;
int b;
};typedef struct rationnel trationnel;
struct maillon{
trationnel r;
struct maillon *pprecedent;
};typedef struct maillon tmaillon;
struct pile{
tmaillon *psommet;
};typedef struct pile tpile;
tpile *creer_pile()
{
tpile *pp=malloc(sizeof(tpile));
if(pp!=NULL)
pp->psommet=NULL;
return pp;
}
tmaillon *creer_maillon(int x,int y)
{
tmaillon *pm=malloc(sizeof(tmaillon));
if(pm!=NULL)
{
pm->r.a=x;
pm->r.b=y;
pm->pprecedent=NULL;
}
return pm;
}
int insertion(tpile *pp)
{
int x,y;
tmaillon *pm;
printf("saisi le nomenateur a et le denominateur b:\t\n");
scanf("%d %d",&x,&y);
pm=creer_maillon(x,y);
if(pm==NULL)
{
printf("erreur!!memoire insuffisante\n");
return 0;
}
pm->pprecedent=pp->psommet;
pp->psommet=pm;
printf("insertion a terminee avec succee\n");
return 1;
}
int teste()
{
int v;
char t;
printf("voulez vous continuer?(o/n):\t");
scanf("%c",&t);
if(t=='o' || t=='O')
v=1;
if(t=='n' || t=='N')
v=0;
return v;
}
main()
{
tpile *toto;
toto=creer_pile();
insertion(toto);
while(teste())
insertion(toto);
}
______________________________________________________________________________
il me propose pas la question :-( il retourne tjr 1
aaaaaaaaiiiiiiiiiiiiidddddddddeeeeezzzzzz svp et merci davance

7 réponses

yougi Messages postés 22 Date d'inscription vendredi 8 juin 2007 Statut Membre Dernière intervention 13 mars 2010 8
9 mars 2008 à 20:17
slt abdessamad ... essyé

do{
insertion(toto);
}while(test()==1);
0
yougi Messages postés 22 Date d'inscription vendredi 8 juin 2007 Statut Membre Dernière intervention 13 mars 2010 8
9 mars 2008 à 20:26
voila la solution sans utilisé la fonction test()




int a=1;
do{
printf("Appuyé sur 1 si vous voulez ajouter un autre élément sinon taper un nombre quelconque");
scanf("%d",&a);
insertion(toto);
}while(a==1);

bon courage abdessamad
0
yougi Messages postés 22 Date d'inscription vendredi 8 juin 2007 Statut Membre Dernière intervention 13 mars 2010 8
9 mars 2008 à 20:38
voila hadi rah il est améliorééééééé tester la

int a=1;
do{
printf("Appuyé sur 1 si vous voulez ajouter un autre élément sinon taper 0");
scanf("%d",a);
do{
printf("1 si tu vei ajouter et 0 sinon... je croi cé calire!!! CONARD .. mdr");
scanf("%d",a);
}while(a!=0 || a!=1);
if(a==1)
insertion(toto);
}while(a==1);
0
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
9 mars 2008 à 20:59
Salutations,

Y a de ça Yougi.

int teste()
{
	int v;
	char t;

	do{ t = getchar(); }while ( t != 'EOF' && t != '\n' );

	printf("voulez vous continuer?(o/n):\t");
	scanf("%c",&t);

	if(t=='o' || t=='O')
		v=1;
	if(t=='n' || t=='N')
		v=0;

	return v;
}


En fait il faut vider le buffer d'entrée avant de faire le scanf car il reste des caractères qui traînent. (surtout un \n je crois)


Autres petites choses qui m'ont fait ***. En C standard... le type de retour de retour de main est int. La valeur de retour des malloc doit être castée avant d' être affectée à une variable. (*2 celle là)

M.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
abdess111 Messages postés 40 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 mai 2008 1
9 mars 2008 à 23:08
ok merci bcp cest trop gentille jai cassé ma tet tt le dimanche avec cette fonction mais jarrive pas a trouver la solution
et si tu peu me dire cest pr koi t=getchar? il va faire koi au t
merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
0
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
10 mars 2008 à 09:55
do{ t = getchar(); }while ( t != 'EOF' && t != '\n' );


getchar() est équivalent à fgetc( stdin ) Cela lit donc un caractère (quel qu'il soit contrairement au scanf) et le renvoie. On se sert généralement d'une ligne similaire avant des scanf pour vider tout ce qui peut rester dans stdin et qui peut gêner la saisie suivante.
t ne sert qu'à récupérer le caractère lu pour voir quand s'arrêter. On aurait pu déclarer un autre char mais bon...


M.
0
abdess111 Messages postés 40 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 mai 2008 1
10 mars 2008 à 10:43
bien compris merci bcp pour les informations :-)
0