Liste chaînée [Résolu]

Signaler
Messages postés
3
Date d'inscription
lundi 19 mai 2014
Statut
Membre
Dernière intervention
20 mai 2014
-
Messages postés
3
Date d'inscription
lundi 19 mai 2014
Statut
Membre
Dernière intervention
20 mai 2014
-
Bonjour à tous,
Je dois faire un programme pour un projet d'école avec en autres l'utilisation des listes chaînées .. Mon programme est de réaliser des calculs de piles électrochimiques. Et je voudrais en autres utiliser les listes chaînées pour encoder les différents résultats et ensuite classer les différents potentiels de piles par ordre croissant .. le soucis c'est que j'arrive à faire les différent fonctions pour les listes ( insertion, affichage,...) mais ma liste ne s'affiche pas à la fin du programme. Je n'arrive pas à trouver mon erreur...
Pourriez-vous m'aider, ce serait bien aimable de votre part :)
Un grand merci d'avance.
Voici mon programme :

PS: Je n'ai réaliser la chaîne que pour le premier case pour l'instant.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>


void Clean_String(char *ProgInput);


typedef struct PILEListe
{
  float *Ereaction;
  struct PILEListe *suivant;
}PILE;


typedef struct ListeRepere
{
  PILE *debut;
  PILE *fin;
  int taille;
}Liste;

void initialisation (Liste * liste,int taille);
int ins_dans_liste_vide (Liste *liste, float *Ereaction);
int ins_debut_liste (Liste * liste,float *Ereaction);
int ins_fin_liste (Liste *liste, PILE *courant, float *Ereaction);
int supp_debut (Liste *liste);
void affiche ( Liste *Liste );

int main (void)
{
    char ProgInput[100];
    char MenuInput[4];
    int DataSize, taille;
    FILE*PileCuivreZinc;
    FILE*PileCuivrePlomb;
    FILE*PileCuivreArgent;
    FILE*PileZincPlomb;
    FILE*PileZincArgent;
    FILE*PilePlombArgent;
    char *nom;

    float concCu,concZn,concPb,concAg;
    float Cu,Zn,Pb,Ag;
    float Ereaction,Ecathode,Eanode,EreactionCuZn,EreactionCuPb;
    int choix;
    char cont [4];


    do
    {   printf("Que voulez-vous faire ?");
        printf ("\n1.Pile Cuivre-Zinc\n");
        printf ("2.Pile Cuivre-Plomb\n");
        printf ("3.Pile Cuivre-Argent\n");
        printf ("4.Pile Zinc-plomb\n");
        printf ("5.Pile Zinc-Argent\n");
        printf ("6.Pile Plomb-Argent\n");
        printf ("------------------------\n");
        printf("\nVotre choix: ");
        //scanf ("%d",&choix);
        fgets(MenuInput,sizeof choix,stdin);
        Clean_String(MenuInput);
        sscanf(MenuInput,"%d",&choix);

        switch (choix)
        {
            case 1 :    printf("Pile Cuivre-Zinc\n");
                        printf("-------------------------\n");
                        PileCuivreZinc=fopen("PileCuivreZinc.txt","w");

                        if(PileCuivreZinc!=NULL)
                        {
                            fputs("--PileCuivreZinc--\n",PileCuivreZinc);
                            fputs("Eo Cu++/Cu=+0,34V\n",PileCuivreZinc);
                            fputs("Eo Zn++/Zn=-0,76V\n",PileCuivreZinc);
                            fgets(ProgInput,sizeof ProgInput, PileCuivreZinc);
                        }
                            if(strcmp(ProgInput,"--PileCuivreZinc--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileCuivreZinc);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileCuivreZinc);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PileCuivreZinc=fopen("PileCuivreZinc.txt","r");
                            if(PileCuivreZinc!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileCuivreZinc)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileCuivreZinc);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Cu++/Cu - (0,059/2)*log(1/[Cu++])\n");
                            printf("Eanode=E0 Zn++/Zn - (0,059/2)*log(1/[Zn++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Cu++/Cu compris dans le fichier precedent\n");
                            scanf("%f",&Cu);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Zn++/Zn compris dans le fichier precedent\n");
                            scanf("%f",&Zn);
                            printf("Entrez la valeur de la concentration en Cu++\n");
                            scanf("%f",&concCu);
                            printf("Entrez la valeur de la concentration en Zn++\n");
                            scanf("%f",&concZn);
                            Ecathode=(Cu-(0.59/2)* log10(1/concCu));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Zn-(0.59/2)* log10(1/concZn));
                            printf("Eanode :%f Volts\n",Eanode);
                            EreactionCuZn=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",EreactionCuZn);

                            Ereaction=EreactionCuZn;
void  initialisation ();
int ins_debut_liste ();
void affiche ();
printf ("\n Creation de la premiere pile:\n");





                            break;
            case 2 :        printf("Pile Cuivre-Plomb\n");
                        printf("-------------------------\n");
                        PileCuivrePlomb=fopen("PileCuivrePlomb.txt","w");

                        if(PileCuivrePlomb!=NULL)
                        {
                            fputs("--PileCuivrePlomb--\n",PileCuivrePlomb);
                            fputs("Eo Cu++/Cu=+0,34V\n",PileCuivrePlomb);
                            fputs("Eo Pb++/Pb=-0.13V\n",PileCuivrePlomb);
                            fgets(ProgInput,sizeof ProgInput, PileCuivrePlomb);
                        }
                            if(strcmp(ProgInput,"--PileCuivrePlomb--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileCuivrePlomb);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileCuivrePlomb);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PileCuivrePlomb=fopen("PileCuivrePlomb.txt","r");
                            if(PileCuivrePlomb!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileCuivrePlomb)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileCuivrePlomb);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Cu++/Cu - (0,059/2)*log(1/[Cu++])\n");
                            printf("Eanode=E0 Pb++/Pb - (0,059/2)*log(1/[Pb++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Cu++/Cu compris dans le fichier precedent\n");
                            scanf("%f",&Cu);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Pb++/Pb compris dans le fichier precedent\n");
                            scanf("%f",&Pb);
                            printf("Entrez la valeur de la concentration en Cu++\n");
                            scanf("%f",&concCu);
                            printf("Entrez la valeur de la concentration en Pb++\n");
                            scanf("%f",&concPb);
                            Ecathode=(Cu-(0.59/2)* log10(1/concCu));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Pb-(0.59/2)* log10(1/concPb));
                            printf("Eanode :%f Volts\n",Eanode);
                            EreactionCuPb=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",EreactionCuPb);






                        break;
            case 3 :        printf("Pile Cuivre-Argent\n");
                        printf("-------------------------\n");
                        PileCuivreArgent=fopen("PileCuivreArgent.txt","w");

                        if(PileCuivreArgent!=NULL)
                        {
                            fputs("--PileCuivreArgent--\n",PileCuivreArgent);
                            fputs("Eo Cu++/Cu=+0,34V\n",PileCuivreArgent);
                            fputs("Eo Ag+/Ag=+0,80V\n",PileCuivreArgent);
                            fgets(ProgInput,sizeof ProgInput, PileCuivreArgent);
                        }
                            if(strcmp(ProgInput,"--PileCuivreArgent--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileCuivreArgent);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileCuivreArgent);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PileCuivreArgent=fopen("PileCuivreArgent.txt","r");
                            if(PileCuivreArgent!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileCuivreArgent)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileCuivreArgent);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Ag+/Ag - (0,059/2)*log(1/[Ag+])\n");
                            printf("Eanode=E0 Cu++/Cu - (0,059/2)*log(1/[Cu++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Cu++/Cu compris dans le fichier precedent\n");
                            scanf("%f",&Cu);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Ag+/Ag compris dans le fichier precedent\n");
                            scanf("%f",&Ag);
                            printf("Entrez la valeur de la concentration en Cu++\n");
                            scanf("%f",&concCu);
                            printf("Entrez la valeur de la concentration en Ag+\n");
                            scanf("%f",&concAg);
                            Ecathode=(Ag-(0.59/2)* log10(1/concAg));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Cu-(0.59/2)* log10(1/concCu));
                            printf("Eanode :%f Volts\n",Eanode);
                            Ereaction=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",Ereaction);
                            break;
            case 4 :        printf("Pile Zinc-Plomb\n");
                        printf("-------------------------\n");
                        PileZincPlomb=fopen("PileZincPlomb.txt","w");

                        if(PileZincPlomb!=NULL)
                        {
                            fputs("--PileZincPlomb--\n",PileZincPlomb);
                            fputs("Eo Zn++/Zn=-0,76V\n",PileZincPlomb);
                            fputs("Eo Pb++/Pb=-0,13V\n",PileZincPlomb);
                            fgets(ProgInput,sizeof ProgInput, PileZincPlomb);
                        }
                            if(strcmp(ProgInput,"--PileZincPlomb--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileZincPlomb);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileZincPlomb);
                            printf("\n");
                            puts("---Text File read!---");
                            PileZincPlomb=fopen("PileZincPlomb.txt","r");
                            if(PileZincPlomb!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileZincPlomb)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileZincPlomb);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Pb++/Pb - (0,059/2)*log(1/[Pb++])\n");
                            printf("Eanode=E0 Zn++/Zn - (0,059/2)*log(1/[Zn++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Zn++/Zn compris dans le fichier precedent\n");
                            scanf("%f",&Zn);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Pb++/Pb compris dans le fichier precedent\n");
                            scanf("%f",&Pb);
                            printf("Entrez la valeur de la concentration en Zn++\n");
                            scanf("%f",&concZn);
                            printf("Entrez la valeur de la concentration en Pb++\n");
                            scanf("%f",&concPb);
                            Ecathode=(Pb-(0.59/2)* log10(1/concPb));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Zn-(0.59/2)* log10(1/concZn));
                            printf("Eanode :%f Volts\n",Eanode);
                            Ereaction=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",Ereaction);
                            break;

            case 5 :        printf("Pile Zinc-Argent\n");
                        printf("-------------------------\n");
                        PileZincArgent=fopen("PileZincArgent.txt","w");

                        if(PileZincArgent!=NULL)
                        {
                            fputs("--PileZincArgent--\n",PileZincArgent);
                            fputs("Eo Zn++/Zn=-0,76V\n",PileZincArgent);
                            fputs("Eo Ag+/Ag=+0,80V\n",PileZincArgent);
                            fgets(ProgInput,sizeof ProgInput, PileZincArgent);
                        }
                            if(strcmp(ProgInput,"--PileZincArgent--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileZincArgent);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileZincArgent);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PileZincArgent=fopen("PileZincArgent.txt","r");
                            if(PileZincArgent!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileZincArgent)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileZincArgent);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Ag+/Ag - (0,059/2)*log(1/[Ag+])\n");
                            printf("Eanode=E0 Zn++/Zn - (0,059/2)*log(1/[Zn++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Zn++/Zn compris dans le fichier precedent\n");
                            scanf("%f",&Zn);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Ag+/Ag compris dans le fichier precedent\n");
                            scanf("%f",&Ag);
                            printf("Entrez la valeur de la concentration en Zn++\n");
                            scanf("%f",&concZn);
                            printf("Entrez la valeur de la concentration en Pb++\n");
                            scanf("%f",&concAg);
                            Ecathode=(Ag-(0.59/2)* log10(1/concAg));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Zn-(0.59/2)* log10(1/concZn));
                            printf("Eanode :%f Volts\n",Eanode);
                            Ereaction=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",Ereaction);
                            break;
            case 6 :        printf("Pile Plomb-Argent\n");
                        printf("-------------------------\n");
                        PilePlombArgent=fopen("PilePlombArgent.txt","w");

                        if(PilePlombArgent!=NULL)
                        {
                            fputs("--PilePlombArgent--\n",PilePlombArgent);
                            fputs("Eo Pb++/Pb=-0,13V\n",PilePlombArgent);
                            fputs("Eo Ag+/Ag=+0,80V\n",PilePlombArgent);
                            fgets(ProgInput,sizeof ProgInput, PilePlombArgent);
                        }
                            if(strcmp(ProgInput,"--PilePlombArgent--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PilePlombArgent);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PilePlombArgent);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PilePlombArgent=fopen("PilePlombArgent.txt","r");
                            if(PilePlombArgent!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PilePlombArgent)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PilePlombArgent);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Ag+/Ag - (0,059/2)*log(1/[Ag+])\n");
                            printf("Eanode=E0 Pb++/Pb - (0,059/2)*log(1/[Pb++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Zn++/Zn compris dans le fichier precedent\n");
                            scanf("%f",&Pb);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Ag+/Ag compris dans le fichier precedent\n");
                            scanf("%f",&Ag);
                            printf("Entrez la valeur de la concentration en Zn++\n");
                            scanf("%f",&concPb);
                            printf("Entrez la valeur de la concentration en Pb++\n");
                            scanf("%f",&concAg);
                            Ecathode=(Ag-(0.59/2)* log10(1/concAg));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Pb-(0.59/2)* log10(1/concPb));
                            printf("Eanode :%f Volts\n",Eanode);
                            Ereaction=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",Ereaction);
                            break;
            default : printf ("choix incorrect ! \n");
        }
        printf ("\n\nContinuer (oui//non) ? ");
        scanf ("%s",cont);
    }

    while ((strcmp(cont,"oui")==0 )|| (strcmp (cont,"oui")==0));
    system("pause");
    return 0;
}




void Clean_String(char*ProgInput)
{
    char*p;
    char c  ;
    p = strchr(ProgInput,'\n');
    if(p!=NULL)
    {
        *p='\0';

    }
    else
    {
        do
        {
            c=getchar();
        }while(c!='\n');
    }
}


void initialisation (Liste *liste,int taille)
{
  liste->debut = NULL;
  liste->fin = NULL;
  taille = 0;
}

int ins_dans_liste_vide (Liste * liste, float *Ereaction)
{
  PILE *nouveau_PILE;
  if ((nouveau_PILE = (PILE *) malloc (sizeof (PILE))) == NULL)
    return -1;
  if ((nouveau_PILE->Ereaction = (float *) malloc (50 * sizeof (float)))
      == NULL)
    return -1;
  nouveau_PILE->Ereaction=Ereaction;

  nouveau_PILE->suivant = NULL;
  liste->debut = nouveau_PILE;
  liste->fin = nouveau_PILE;
  liste->taille++;
  return 0;
}

int ins_debut_liste (Liste * liste, float *Ereaction){
  PILE *nouveau_PILE;
  if ((nouveau_PILE = (PILE *) malloc (sizeof (PILE))) == NULL)
    return -1;
  if ((nouveau_PILE->Ereaction = (float*) malloc (50 * sizeof (float)))
      == NULL)
    return -1;
  nouveau_PILE->Ereaction=Ereaction;

  nouveau_PILE->suivant = liste->debut;
  liste->debut = nouveau_PILE;
  liste->taille++;
  return 0;
}

int ins_fin_liste (Liste * liste, PILE * courant, float *Ereaction)
{
  PILE *nouveau_PILE;
  if ((nouveau_PILE = (PILE *) malloc (sizeof (PILE))) == NULL)
    return -1;
  if ((nouveau_PILE->Ereaction = (float *) malloc (50 * sizeof (float)))
      == NULL)
    return -1;
  nouveau_PILE->Ereaction=Ereaction;

  courant->suivant = nouveau_PILE;
  nouveau_PILE->suivant = NULL;

  liste->fin = nouveau_PILE;

  liste->taille++;
  return 0;
}


int supp_debut (Liste * liste){
  if (liste->taille == 0)
    return -1;
  PILE *supp_PILE;
  supp_PILE = liste->debut;
  liste->debut = liste->debut->suivant;
  if (liste->taille == 1)
    liste->fin = NULL;
  free (supp_PILE->Ereaction);
  free (supp_PILE);
  liste->taille--;
  return 0;
}

void affiche (Liste * liste)
{
  PILE *courant;
  courant = liste->debut;
  while (courant != NULL)
    {
      printf ("%d - %f\n", courant, courant->Ereaction);
      courant = courant->suivant;
    }
}

6 réponses

Messages postés
32944
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
351
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du
code sur le forum.
Explications disponibles ici :
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Messages postés
16024
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 juin 2021
549
Coloration ajoutée, voir le message de Jordane
Messages postés
3
Date d'inscription
lundi 19 mai 2014
Statut
Membre
Dernière intervention
20 mai 2014

ok Je veillerai à faire ça la prochaine fois.

je cherche toujours après mes erreurs ...
Messages postés
3840
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
121
Bonjour.

Ce n'est pas très clair (d'où l'absence de réponses). Quel est le comportement attendu ? Quel est le comportement obtenu ?
Quel est précisement le souci ?

__________________________________________________________________________________________________
Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Messages postés
16024
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 juin 2021
549
Bonsoir, c'est très bien de marquer son sujet résolu.
C'est encore mieux, pour ceux qui se sont penchés sur ton problème de mettre la solution.
Messages postés
3
Date d'inscription
lundi 19 mai 2014
Statut
Membre
Dernière intervention
20 mai 2014

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

void Clean_String(char *ProgInput);

typedef struct element element;
struct element
{
    float Ereaction;
    char choixpile [10];
    struct element *nxt;
};

typedef element* llist;

llist ajouterEnTete(llist liste, float Ereaction, char *choixpile);
llist ajouterEnFin(llist liste, float Ereaction, char *choixpile);
void afficherListe(llist liste);

int main ()
{
    char ProgInput[100];
    char MenuInput[4];
    FILE*PileCuivreZinc;
    FILE*PileCuivrePlomb;
    FILE*PileCuivreArgent;
    FILE*PileZincPlomb;
    FILE*PileZincArgent;
    FILE*PilePlombArgent;
    struct element*comparaison = NULL;

    float concCu,concZn,concPb,concAg,concAg2;
    float Cu,Zn,Pb,Ag;
    float Ereaction,Ecathode,Eanode,EreactionCuZn,EreactionCuPb,EreactionCuAg,EreactionPbZn,EreactionAgZn,EreactionAgPb;
    int choix,DataSize;
    char cont [4];


    do
    {   printf("Que voulez-vous faire ?");
        printf ("\n1.Pile Cuivre-Zinc\n");
        printf ("2.Pile Cuivre-Plomb\n");
        printf ("3.Pile Cuivre-Argent\n");
        printf ("4.Pile Zinc-plomb\n");
        printf ("5.Pile Zinc-Argent\n");
        printf ("6.Pile Plomb-Argent\n");
        printf ("------------------------\n");
        printf("\nVotre choix: ");
        scanf ("%d",&choix);
        fgets(MenuInput,sizeof choix,stdin);
        Clean_String(MenuInput);
        sscanf(MenuInput,"%d",&choix);

        switch (choix)
        {
            case 1 :
                        printf("Pile Cuivre-Zinc\n");
                        printf("-------------------------\n");
                        PileCuivreZinc=fopen("PileCuivreZinc.txt","w");

                        if(PileCuivreZinc!=NULL)
                        {
                            fputs("--PileCuivreZinc--\n",PileCuivreZinc);
                            fputs("Eo Cu++/Cu=+0,34V\n",PileCuivreZinc);
                            fputs("Eo Zn++/Zn=-0,76V\n",PileCuivreZinc);
                            fgets(ProgInput,sizeof ProgInput, PileCuivreZinc);
                        }
                            if(strcmp(ProgInput,"--PileCuivreZinc--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileCuivreZinc);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileCuivreZinc);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PileCuivreZinc=fopen("PileCuivreZinc.txt","r");
                            if(PileCuivreZinc!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileCuivreZinc)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileCuivreZinc);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Cu++/Cu - (0,059/2)*log([Cu++])\n");
                            printf("Eanode=E0 Zn++/Zn - (0,059/2)*log([Zn++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Cu++/Cu compris dans le fichier precedent:");
                            scanf("%f",&Cu);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Zn++/Zn compris dans le fichier precedent:");
                            scanf("%f",&Zn);
                            printf("Entrez la valeur de la concentration en Cu++:");
                            scanf("%f",&concCu);
                            printf("Entrez la valeur de la concentration en Zn++:");
                            scanf("%f",&concZn);
                            Ecathode=(Cu-(0.059/2)* log10(concCu));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Zn-(0.059/2)* log10(concZn));
                            printf("Eanode :%f Volts\n",Eanode);
                            EreactionCuZn=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",EreactionCuZn);

                            if (EreactionCuZn > Ereaction)
                            {
                                Ereaction=EreactionCuZn;
                                char choixpile [10]="Pile CuZn";

                                comparaison = ajouterEnTete(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");

                            afficherListe(comparaison);


                            }
                            else
                            {
                                Ereaction=EreactionCuZn;
                                char choixpile [10]="Pile CuZn";
                            comparaison = ajouterEnFin(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);


                            }
                            break;
            case 2 :        printf("Pile Cuivre-Plomb\n");
                        printf("-------------------------\n");
                        PileCuivrePlomb=fopen("PileCuivrePlomb.txt","w");

                        if(PileCuivrePlomb!=NULL)
                        {
                            fputs("--PileCuivrePlomb--\n",PileCuivrePlomb);
                            fputs("Eo Cu++/Cu=+0,34V\n",PileCuivrePlomb);
                            fputs("Eo Pb++/Pb=-0.13V\n",PileCuivrePlomb);
                            fgets(ProgInput,sizeof ProgInput, PileCuivrePlomb);
                        }
                            if(strcmp(ProgInput,"--PileCuivrePlomb--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileCuivrePlomb);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileCuivrePlomb);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PileCuivrePlomb=fopen("PileCuivrePlomb.txt","r");
                            if(PileCuivrePlomb!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileCuivrePlomb)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileCuivrePlomb);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Cu++/Cu - (0,059/2)*log([Cu++])\n");
                            printf("Eanode=E0 Pb++/Pb - (0,059/2)*log([Pb++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Cu++/Cu compris dans le fichier precedent:");
                            scanf("%f",&Cu);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Pb++/Pb compris dans le fichier precedent:");
                            scanf("%f",&Pb);
                            printf("Entrez la valeur de la concentration en Cu++:");
                            scanf("%f",&concCu);
                            printf("Entrez la valeur de la concentration en Pb++:");
                            scanf("%f",&concPb);
                            Ecathode=(Cu-(0.059/2)* log10(concCu));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Pb-(0.059/2)* log10(concPb));
                            printf("Eanode :%f Volts\n",Eanode);
                            EreactionCuPb=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",EreactionCuPb);

                            if (EreactionCuPb > Ereaction)
                            {
                                Ereaction=EreactionCuPb;
                                char choixpile [10]="Pile CuPb";
                                comparaison = ajouterEnTete(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);
                            printf("(Pile CuPb) > ");
                            }
                            else
                            {
                                Ereaction=EreactionCuPb;
                                char choixpile [10]="Pile CuPb";
                            comparaison = ajouterEnFin(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);
                            printf("(Pile CuPb) > ");
                            }
                            break;
            case 3 :        printf("Pile Cuivre-Argent\n");
                        printf("-------------------------\n");
                        PileCuivreArgent=fopen("PileCuivreArgent.txt","w");

                        if(PileCuivreArgent!=NULL)
                        {
                            fputs("--PileCuivreArgent--\n",PileCuivreArgent);
                            fputs("Eo Cu++/Cu=+0,34V\n",PileCuivreArgent);
                            fputs("Eo Ag+/Ag=+0,80V\n",PileCuivreArgent);
                            fgets(ProgInput,sizeof ProgInput, PileCuivreArgent);
                        }
                            if(strcmp(ProgInput,"--PileCuivreArgent--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileCuivreArgent);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileCuivreArgent);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PileCuivreArgent=fopen("PileCuivreArgent.txt","r");
                            if(PileCuivreArgent!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileCuivreArgent)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileCuivreArgent);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Ag+/Ag - (0,059/2)*log([Cu++])\n");
                            printf("Eanode=E0 Cu++/Cu - (0,059/2)*log([Ag+]^2)\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Cu++/Cu compris dans le fichier precedent:");
                            scanf("%f",&Cu);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Ag+/Ag compris dans le fichier precedent:");
                            scanf("%f",&Ag);
                            printf("Entrez la valeur de la concentration en Cu++:");
                            scanf("%f",&concCu);
                            printf("Entrez la valeur de la concentration en Ag+:");
                            scanf("%f",&concAg);
                            Ecathode=(Ag-(0.059/2)* log10(concCu));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            concAg2=pow(concAg,2);
                            Eanode=(Cu-(0.059/2)* log10(concAg2));
                            printf("Eanode :%f Volts\n",Eanode);
                            EreactionCuAg=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",EreactionCuAg);

                            if (EreactionCuAg > Ereaction)
                            {
                                Ereaction=EreactionCuAg;
                                char choixpile [10]="Pile CuAg";
                                comparaison = ajouterEnTete(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);

                            }
                            else
                            {
                                Ereaction=EreactionCuAg;
                                char choixpile [10]="Pile CuAg";
                            comparaison = ajouterEnFin(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);

                            }
                            break;
            case 4 :        printf("Pile Zinc-Plomb\n");
                        printf("-------------------------\n");
                        PileZincPlomb=fopen("PileZincPlomb.txt","w");

                        if(PileZincPlomb!=NULL)
                        {
                            fputs("--PileZincPlomb--\n",PileZincPlomb);
                            fputs("Eo Zn++/Zn=-0,76V\n",PileZincPlomb);
                            fputs("Eo Pb++/Pb=-0,13V\n",PileZincPlomb);
                            fgets(ProgInput,sizeof ProgInput, PileZincPlomb);
                        }
                            if(strcmp(ProgInput,"--PileZincPlomb--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileZincPlomb);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileZincPlomb);
                            printf("\n");
                            puts("---Text File read!---");
                            PileZincPlomb=fopen("PileZincPlomb.txt","r");
                            if(PileZincPlomb!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileZincPlomb)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileZincPlomb);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Pb++/Pb - (0,059/2)*log([Zn++])\n");
                            printf("Eanode=E0 Zn++/Zn - (0,059/2)*log([Pb++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Zn++/Zn compris dans le fichier precedent:");
                            scanf("%f",&Zn);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Pb++/Pb compris dans le fichier precedent:");
                            scanf("%f",&Pb);
                            printf("Entrez la valeur de la concentration en Zn++:");
                            scanf("%f",&concZn);
                            printf("Entrez la valeur de la concentration en Pb++:");
                            scanf("%f",&concPb);
                            Ecathode=(Pb-(0.059/2)* log10(concZn));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Zn-(0.059/2)* log10(concPb));
                            printf("Eanode :%f Volts\n",Eanode);
                            EreactionPbZn=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",EreactionPbZn);

                            if (EreactionPbZn > Ereaction)
                            {
                                Ereaction=EreactionPbZn;
                                char choixpile [10]="Pile PbZn";
                                comparaison = ajouterEnTete(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);
                            printf("(Pile ZnPb) > ");
                            }
                            else
                            {
                                Ereaction=EreactionPbZn;
                                char choixpile [10]="Pile PbZn";
                            comparaison = ajouterEnFin(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);
                            printf("(Pile ZnPb) > ");
                            }
                            break;

            case 5 :        printf("Pile Zinc-Argent\n");
                        printf("-------------------------\n");
                        PileZincArgent=fopen("PileZincArgent.txt","w");

                        if(PileZincArgent!=NULL)
                        {
                            fputs("--PileZincArgent--\n",PileZincArgent);
                            fputs("Eo Zn++/Zn=-0,76V\n",PileZincArgent);
                            fputs("Eo Ag+/Ag=+0,80V\n",PileZincArgent);
                            fgets(ProgInput,sizeof ProgInput, PileZincArgent);
                        }
                            if(strcmp(ProgInput,"--PileZincArgent--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileZincArgent);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileZincArgent);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PileZincArgent=fopen("PileZincArgent.txt","r");
                            if(PileZincArgent!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileZincArgent)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileZincArgent);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Ag+/Ag - (0,059/2)*log([Ag+]^2)\n");
                            printf("Eanode=E0 Zn++/Zn - (0,059/2)*log([Zn++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Zn++/Zn compris dans le fichier precedent:");
                            scanf("%f",&Zn);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Ag+/Ag compris dans le fichier precedent:");
                            scanf("%f",&Ag);
                            printf("Entrez la valeur de la concentration en Zn++\n");
                            scanf("%f",&concZn);
                            printf("Entrez la valeur de la concentration en Pb++\n");
                            scanf("%f",&concAg);
                            concAg2=pow(concAg,2);
                            Ecathode=(Ag-(0.059/2)* log10(concAg2));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Zn-(0.059/2)* log10(concZn));
                            printf("Eanode :%f Volts\n",Eanode);
                            EreactionAgZn=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",EreactionAgZn);

                            if (EreactionAgZn > Ereaction)
                            {
                                Ereaction=EreactionAgZn;
                                char choixpile [10]="Pile AgZn";
                                comparaison = ajouterEnTete(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);

                            }
                            else
                            {
                                Ereaction=EreactionAgZn;
                                char choixpile [10]="Pile AgZn";
                            comparaison = ajouterEnFin(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);

                            }
                            break;
            case 6 :        printf("Pile Plomb-Argent\n");
                        printf("-------------------------\n");
                        PilePlombArgent=fopen("PilePlombArgent.txt","w");

                        if(PilePlombArgent!=NULL)
                        {
                            fputs("--PilePlombArgent--\n",PilePlombArgent);
                            fputs("Eo Pb++/Pb=-0,13V\n",PilePlombArgent);
                            fputs("Eo Ag+/Ag=+0,80V\n",PilePlombArgent);
                            fgets(ProgInput,sizeof ProgInput, PilePlombArgent);
                        }
                            if(strcmp(ProgInput,"--PilePlombArgent--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PilePlombArgent);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PilePlombArgent);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PilePlombArgent=fopen("PilePlombArgent.txt","r");
                            if(PilePlombArgent!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PilePlombArgent)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PilePlombArgent);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Ag+/Ag - (0,059/2)*log([Ag+]^2)\n");
                            printf("Eanode=E0 Pb++/Pb - (0,059/2)*log([Pb++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Zn++/Zn compris dans le fichier precedent:");
                            scanf("%f",&Pb);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Ag+/Ag compris dans le fichier precedent:");
                            scanf("%f",&Ag);
                            printf("Entrez la valeur de la concentration en Zn++\n");
                            scanf("%f",&concPb);
                            printf("Entrez la valeur de la concentration en Pb++\n");
                            scanf("%f",&concAg);
                            concAg2=pow(concAg,2);
                            Ecathode=(Ag-(0.059/2)* log10(concAg2));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Pb-(0.059/2)* log10(concPb));
                            printf("Eanode :%f Volts\n",Eanode);
                            EreactionAgPb=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",EreactionAgPb);

                            if (EreactionAgPb > Ereaction)
                            {
                                Ereaction=EreactionAgPb;
                                char choixpile [10]="Pile AgPb";
                                comparaison = ajouterEnTete(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);

                            }
                            else
                            {
                                Ereaction=EreactionAgPb;
                                char choixpile [10]="Pile AgPb";
                            comparaison = ajouterEnFin(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);

                            }
                            break;
            default : printf ("choix incorrect ! \n");
        }
        printf ("\n\nContinuer (oui//non) ? ");
        scanf ("%s",cont);
    }

    while ((strcmp(cont,"oui")==0 )|| (strcmp (cont,"oui")==0));
    system("pause");
    return 0;
}




void Clean_String(char*ProgInput)
{
    char*p;
    char c  ;
    p = strchr(ProgInput,'\n');
    if(p!=NULL)
    {
        *p='\0';

    }
    else
    {
        do
        {
            c=getchar();
        }while(c!='\n');
    }
}

llist ajouterEnTete(llist liste, float Ereaction, char *choixpile)
{
    /* On crée un nouvel élément */
    element* nouvelElement = malloc(sizeof(element));

    /* On assigne la valeur au nouvel élément */
    nouvelElement->Ereaction = Ereaction;
    /* On assigne la valeur au nouvel élément */
    //nouvelElement->choixpile = choixpile;
    strcpy(nouvelElement->choixpile, choixpile);


    /* On assigne l'adresse de l'élément suivant au nouvel élément */
    nouvelElement->nxt = liste;


    /* On retourne la nouvelle liste, i.e. le pointeur sur le premier élément */
    return nouvelElement;
}

void afficherListe(llist liste)
{

    element *tmp = liste;
    /* Tant que l'on n'est pas au bout de la liste */
    while(tmp != NULL)
    {
        /* On affiche */
        printf(" > %f (%s) ", tmp->Ereaction, tmp->choixpile);
        /* On avance d'une case */
        tmp = tmp->nxt;
    }
}

llist ajouterEnFin(llist liste, float Ereaction, char *choixpile)
{
    /* On crée un nouvel élément */
    element* nouvelElement = malloc(sizeof(element));
    /* On assigne la valeur au nouvel élément */
    nouvelElement->Ereaction = Ereaction;
    /* On assigne la valeur au nouvel élément */
   // nouvelElement->choixpile = choixpile;
    strcpy(nouvelElement->choixpile, choixpile);

    /* On ajoute en fin, donc aucun élément ne va suivre */
    nouvelElement->nxt = NULL;

    if(liste == NULL)
    {
        /* Si la liste est videé il suffit de renvoyer l'élément créé */
        return nouvelElement;
    }
    else
    {
        /* Sinon, on parcourt la liste à l'aide d'un pointeur temporaire et on
        indique que le dernier élément de la liste est relié au nouvel élément */
        element* temp=liste;
        while(temp->nxt != NULL)
        {
            temp = temp->nxt;
        }
        temp->nxt = nouvelElement;

        return liste;
    }
}