Probleme dans les piles

Résolu
abdess111 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   -  
abdess111 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   8
 
slt abdessamad ... essyé

do{
insertion(toto);
}while(test()==1);
0
yougi Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   8
 
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   Statut Membre Dernière intervention   8
 
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   Statut Membre Dernière intervention   125
 
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   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   125
 
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   Statut Membre Dernière intervention   1
 
bien compris merci bcp pour les informations :-)
0