Please Aidez Moi dans ce Programme c

Bonjour Svp aidez Moi pour exécuter ce programme en c , Merci

#include<stdlib.h>
#include<conio.h>
typedef struct cell{
int valeur;
struct cell *suivant;
} cellule;
typedef cellule* liste;
liste saisieListe(void) {
/* rend l'adresse de début de la liste saisie */
liste li=NULL, precedent, actuel ;
int val, erreur ;
printf("\n\n\n\n\n");
do {
printf("\n\t prochaine valeur ? (un caractère pour finir) : ");
erreur=scanf("%d",&val) ;
if(erreur<=0) break ; /* scanf() rend le nombre de variables lues sans
erreur */
actuel=(liste)malloc(sizeof(cellule)) ;

actuel->valeur=val ;
if(li==NULL) li=actuel ;
else
precedent->suivant=actuel ;
precedent=actuel ;
} while (1) ;
actuel->suivant=NULL ;
return(li) ;
}
void afficheListe(liste li) {
liste li1=li;
printf("\n\n\n\n\t affichage de la liste li : ");
for(li1=li;li1!=NULL;li1=li1->suivant){
printf(" %d",li1->valeur);
}
getch();
}
int LongueurListeIt(liste li) {
int n=0 ;
while(li!=NULL) {
n++ ;
li=li->suivant ;
}
return(n) ;
}
int NbOccIt(liste li, int val) {
int nb=0 ;
while(li!=NULL) {
if (li->valeur==val)
nb++ ;
li=li->suivant ;
}
return(nb) ;
}
void insertionPremier(liste *li, int val) {
liste nouv ;
nouv=(liste)malloc(sizeof(cellule));
nouv->valeur=val ;
nouv->suivant=*li ;
*li=nouv ;
}
void insertionMilieu(liste li, int val) {
liste nouv ;
nouv=(liste)malloc(sizeof(cellule));
nouv->valeur=val ;
nouv->suivant=li->suivant ;
li->suivant=nouv ;
}
liste chercherPrecedent(liste li, liste suiv) {
/* rendre l'adresse NULL si on pas trouvé */
while(li->suivant!=suiv && li!=NULL)
li=li->suivant ;
return(li) ;
}
liste chercherIndice(liste li, int i) {
/* rend l'adresse du(i+1)-ième, NULL si liste trop courte */
int j ;
for(j=0 ;j<i && li!=NULL ;j++)
li=li->suivant ;
return(li) ;
}
liste chercherElement(liste li, int val) {
/* rend l'adresse, NULL si on n'a pas trouvé */
while(li!=NULL && li->valeur!=val)
li=li->suivant ;
return(li) ;
}
void supprimerSuivant(liste precedent) {
liste supp ;
if(precedent==NULL || precedent->suivant==NULL) {
puts("\n\n\n\n\t\t rien a supprimer!");
return;
}
supp=precedent->suivant;
precedent->suivant=supp->suivant;
free(supp);
}
void supprimerPremier(liste *li) {
liste supp ;
if(*li==NULL) {
puts("\n\n\n\n\t\t rien a supprimer!");
return;
}
supp=*li;
*li=(*li)->suivant ;
free(supp);
}
void supprimerTout(liste li) {
liste supp ;
while(li !=NULL) {
supp=li->suivant;
free(li) ;
li=supp;
}
}
int main() {
liste li, laux, pl, li1;
int val, i, n, k, choix;

li=saisieListe();

afficheListe(li);
do {

printf("---------------------------------\n");
printf("1 Pour saisir une nouvelle liste ....... \n");
printf("2 Pour afficher la liste saisie ....... \n");
printf("3 Pour calculer la longueur ....... \n");
printf("4 Pour calculer le nombre d'occ. ....... \n");
printf("5 Pour inserer au debut ....... \n");
printf("6 Pour inserer au milieu ....... \n");
printf("7 Pour supprimer au debut ....... \n");
printf("8 Pour supprimer au milieu ....... \n");
printf("9 Pour quitter le programme ....... \n");
printf("0 Donner votre choix s.v.p. .......:");
scanf("%d",&choix);
switch(choix) {
case 1 : {

li=saisieListe();
afficheListe(li);
break;
}
case 2 : {

afficheListe(li);
break;
}
case 3 : {

k=LongueurListeIt(li);
printf("\n\n\n\n\t\t la longueur est %d\n",k);
getch();
break;
}
case 4 : {

printf("\t\t val ? ");
scanf("%d",&val) ;
n=NbOccIt(li,val);
printf("\n\n\n\n") ;
printf("\t\t le nombre d'occurence de %d est %d\n",val,n);
getch();
break;
}
case 5 : {

printf("\n\n\n\n\t\t valeur a inserer au debut ? ");
scanf("%d",&val) ;
insertionPremier(&li,val);
afficheListe(li);
break;
}
case 6 : {

printf("\n\n\n\n\t\t valeur a inserer au milieu ? ");
scanf("%d",&val) ;
insertionMilieu(li,val);
afficheListe(li);
break;
}
case 7 : {

supprimerPremier(&li);
afficheListe(li);
break;
}
case 8 : {

supprimerSuivant(li->suivant);
afficheListe(li);
break;
}
default : break;
}
}while(choix);
supprimerTout(li);
afficheListe(li);

getche();
}

11 réponses

Résumé de la discussion

Un programme en C qui gère une liste chaînée échoue à s’exécuter correctement, les messages d’erreur et les problèmes de compatibilité résultant principalement du manque d’en-têtes standard et de l’usage de fonctions obsolètes. La meilleure réponse recommande d’ajouter les en-têtes stdio.h pour printf et scanf, et string.h pour puts et gets, afin de résoudre les erreurs de compilation et la reconnaissance des fonctions d’E/S. Des échanges conseillent aussi d’utiliser des blocs de code, de remplacer getch() par getchar(), et d’éviter l’usage de gets en raison de sa dépréciation et de risques de sécurité. D'autres interventions recommandent de nettoyer le code, d’enlever les variables inutiles et de remplacer des appels par des méthodes modernes adaptées au C contemporain.

Bobot (l’IA à votre service)
  1. Salut,

    déjà il n'y a pas stdio.h...utile pour les printf je crois.
    0
    1. j l ai ajouté et ça marche pas :( mm prb
      0
      1. A quoi sert laux, pl, li1 dans le main je ne comprends pas et aussi tu dois rajouter un return 0; à la fin de ton main...c'est quoi conio ?
        0
        1. li1 est dans la liste en haut
          0
          1. li1 est une variable locale à la fonction afficheListe. Donc non visible dans le main.
            0
        2. et quels sont les messages d'erreur ?
          0
          1. je sais pas le programme s'éxecute pas je sais pas c koi le prb
            0
            1. ça marche chez moi et j'ai ajouté quelques modifications:

              https://pastebin.com/VQur4kaj

              J'ai enlevé les variables inutile et remplacer les getch par getchar().
              0
            2. Tu peux me l'envoyer pr le voir stp ?
              0
            3. Ben clique sur le lien
              0
            4. J l'ai exécuter mais il m'affiche seulement prochaine valeur ? (un caractère pour finir) et il se ferme :(
              0
            5. Ah ben je sais pas moi ça marche sous linux. Il fait tout ce qui est dit dans le menu...
              0
          2. Je veux aussi lui ajouter cette fonction ms je sais pas comment

            void vider_buffer(){
            scanf("%*[^\n]");
            getchar ();
            }
            0
            1. Elle fera quoi exactement cette fonction, à toi de trouver l'algorithme...et d'implémenter.

              Un string dans l'array.
              0
              1. Contributeur
                Bonjour,

                Je n'ai pas lu le programme car il est illisible.
                Merci donc de le poster en le mettant dans des balises "code" (bouton <> à droite du bouton souligné).

                Sinon void vider_buffer(){
                scanf("%*[^\n]");
                getchar ();
                }
                Ok pour la fonction. C'est quoi qui te pose problème dedans ? Tu as juste à l'appeler dès que tu utilises un scanf() ;-).

                Et un conseil, rajoute un system("pause"); à la fin de ton programme dans (juste avant le return 0; du main()) pour éviter que ton programme se ferme.
                0
                1. ça marche avec pause mais , Je vx Qu'il m'affiche le menu :(
                  0
                  1. Ton programme fonctionne après modification, quelqu'un peut le confirmer ? c'est louche que t'aies encore des problèmes.
                    0
                  2. :( y'a encore des prb mm si les modification qu'on a fait
                    0
                  3. Contributeur
                    Ravis d'avoir fait fonctionner ton programme sans avoir lu ton programme. Mais comme je t'ai dit, je ne lirai pas ton code si tu ne repostes pas la version actuelle en utilisant la balise code car en l'état c'est illisible.
                    0
                  4. j ai pas compris comment faire pr utiliser la balise code ?
                    0
                  5. Contributeur
                    Lorsque tu écris ton commentaire, tu as 4 boutons (B, I, S,<>) qui te permettent une mise en forme. B : pour le gras, I pour l'italique, S pour le souligné et enfin <> pour garder l'indentation du code. Tu cliques donc sur <>. Une balise < code > < / code > va apparaître. T'écris ton code entre les deux. Par exemple : < code > int main(void)... < /code >. (J'ai mis un espace entre < et > et code, mais il y en a pas).
                    0