Bonjour à tous,
Voilà j'ai un simple petit problème dans la dernière fonction de mon programme.
Lorsque je lance la fonction recherche, mon programme part en boucle infinie et je ne vois pas du tout mon erreur. Je pensais à un simple problème d'initialisation mais ça ne règle pas mon soucis, ou alors je n'ai pas initialisé au bon endroit.
Voici le code et merci d'avance!
Code:#include<stdio.h> #include<stdlib.h> struct liste { int info; struct liste *suiv; }; int main() { int option; struct liste * tete; int element; int menu(); int creationok=0; int compteur; struct liste*creation(void); struct liste*ajout(struct liste*p,int n); struct liste * suppression (struct liste * p,int n); void affiche(struct liste*p); int comptage (struct liste * p); void recherche(struct liste * p,int *pointeur); do { option=menu(); switch(option) { /* Création de la liste */ case 1 : if(!creationok) { tete=creation(); creationok=1; } break; /* Encodage */ case 2 : if(creationok) { printf("Entrez un element : "); scanf("%d",&element); tete=ajout(tete,element); } else printf("Creez d'abord une liste\n"); system("pause"); break; /* Affichage */ case 3 : if(creationok) { affiche(tete); system("pause"); } break; /* Suppression */ case 4 : printf("Entrez un element a supprimer de la liste : "); scanf("%d",&element); tete=suppression(tete,element); break; /* Comptage */ case 5 : if(creationok) printf("il y a %d elements multiples du premier\n",comptage(tete)); system("pause"); break; /* Recherche d'éléments */ case 6 : printf("Entrez l'element a rechercher"); scanf("%d",&element); recherche(tete,&element); system("pause"); break; /* Fermeture */ case 0 : printf("Ce programme va terminer\n\n"); system("pause"); break; } }while(option !=0); } int menu(void) { int option; do { system("cls"); printf("0 : Terminer le programme\n"); printf("1 : Creation d une liste\n"); printf("2 : Ajout d'un element dans la liste\n"); printf("3 : Affichage de la liste dans l'ordre croissant\n"); printf("4 : Suppression d'un element de la liste\n"); printf("5 : Comptage des elements multiples du premier\n"); printf("6 : Recherche d'elements\n"); scanf("%d",&option); }while (option>6); return option; } struct liste*creation(void) { return NULL; }; /* Ajouter un élément à la liste */ struct liste*ajout (struct liste*p, int n) { struct liste*q; if(p!=NULL) { if(n>p->info) { p->suiv=ajout(p->suiv,n); q=p; } else { q=(struct liste*)malloc(sizeof(struct liste)); q->info=n; q->suiv=p; } } else { q=(struct liste*)malloc(sizeof (struct liste)); q->info=n; q->suiv=p; } return q; } /* Affichage des éléments */ void affiche(struct liste*p) { if(p!=NULL) { printf("\n"); printf(" %d ",p->info); affiche (p->suiv); printf("\n"); } } /* Suppression d'un élément*/ struct liste * suppression (struct liste * p,int n) { struct liste * q; if(p!=NULL) { if (n>p->info) { p->suiv=suppression(p->suiv,n); q=p; } else if(n==p->info) { q=p->suiv; free(p); } else q=p; return q; } } /* Comptage des éléments */ int comptage (struct liste * p) { int compteur=0; int element=p->info; while (p) { if((p->info) % (element) == 0) compteur++; p=p->suiv; } return compteur; } /* Recherche d'un élément */ void recherche(struct liste * p,int *pointeur) { (*pointeur)=0; while (((*pointeur)!=(p->info)) || ((p->suiv) != NULL)) { if ((*pointeur)==(p->info)) { p=p->suiv; printf("l'element se trouve en position %d",(*pointeur)); } else if((*pointeur)>(p->info)) (*pointeur)++; else printf("Le nombre ne se trouve pas dans la liste mais devrait etre entre la place %d et %d\n",*pointeur,(*pointeur)+1); } }
-----