Probleme variable C

Résolu/Fermé
didy_gwatinik Messages postés 352 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 30 mars 2010 - 2 avril 2008 à 13:23
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 - 2 avril 2008 à 14:31
Bonjour,
Je suis sur un projet répertoire donc l'utilisateur fait la saisie des informations... puis à la fermeture du fichier j'enregistre le contenu des variables dans un fichier, en premier on a le nombre de contact, puis les informations des contacts. Mon problème arrive ici : lors de la réouverture du programme je tente de mettre ce qu'il a dans le fichier dans les variables appropriées mais ça ne marche, le nombre de contact est nul alors que dans le fichier la première ligne affiche bien 3. Je vous poste mon code si quelqu'un peut m'aider. Je pense qu'il doit y a avoir un problème au niveau de la fonction atoi() mais je n'arrive pas à le régler. Je débute en C mon code n'est surement pas des plus optimisés. Donc les remarques sont les bienvenues. Je suis sur DEV C++. Merci d'avance...
C'est un peu long :s
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#define N 10
#define taille 52
#define chemin "C:\\repertoire.txt"

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Déclaration de la structure carnet
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 struct carnet
          {
                 char nom[20];
                 char prenom[20];
                 char numTel[11];
                 char mel[50];
                 char motdepasse[9];
          }tab[N];
          
          
//++++++++++++++++++++++++++++++++          
//Procedure Presentation
//++++++++++++++++++++++++++++
void presentation()
{
     printf("\n\n\n\n\n\n");
     puts("       *****************************************************");
     puts("       *                                                   *");
     puts("       *                 CARNET D'ADRESSE                  *"); 
     puts("       *                                                   *");
     puts("       *****************************************************");
     printf("\n\n\n\n\n\n");
     system("pause");
     system("cls");
}


//++++++++++++++++++++++++
//Procedure NomPresent
//+++++++++++++++++++++++
void nomPresent(int *nbContact)
{
     int i=0;
     puts("Voici les contacts presents dans votre repertoire");
     for(i=0;i<*nbContact;i++)
     {
                     printf("%s\n", tab[i].nom);
     }
}


//++++++++++++++++++++++++++
//Procedure decryptageFichier
//+++++++++++++++++++++++++
void decryptageFichier(int *nbContact)
{
     int i=0;
     char nomSaisi[20],motdepasse[9];
     system("cls");
     nomPresent(nbContact);
     puts("De quelle personne voulez vous decrypter l'acces aux coordonnes ?");
     scanf("%s", &nomSaisi);
     for(i=0;i<*nbContact;i++)
     {
                     if(strcmp(nomSaisi,tab[i].nom)==0)
                     break;
     }
     if(strlen(tab[i].motdepasse)>1)
     {
                                    printf("Mot de passe : ");
                                    scanf("%s",&motdepasse);
                                    if(strcmp(motdepasse,tab[i].motdepasse)==0)
                                    printf("L'acces aux coordonnees a ete decrypte");
                                    strcpy(tab[i].motdepasse,""); //le mot de passe ne contient plus de caractere
     }
     else{printf("Il n'y a pas de mot de passe pour cette personne");}
     getch();
}
                                    
                                    
//+++++++++++++++++++++++ 
//Procedure SuppressionFiche
//+++++++++++++++++++++++
void suppressionFiche(int *nbContact)
{
     int i=0,reponse=0;
     char nomSaisi[20];
     system("cls");
     nomPresent(nbContact);
     puts("De quelle personne voulez-vous supprimer la fiche?");
     scanf("%s", &nomSaisi);
     for(i=0;i<*nbContact;i++)
     {
                     if(strcmp(nomSaisi,tab[i].nom)==0)
                     break;
     }
     printf("Validez la suppression des coordonnées de %s %s en tapant sur 1\n", tab[i].nom, tab[i].prenom);
     scanf("%d", &reponse);
     if(reponse==1)
     {
                   //copie du contenu de la derniere fiche a la place de celle a supprimer 
                   strcpy(tab[i].nom,tab[*nbContact].nom);
                   strcpy(tab[i].prenom,tab[*nbContact].prenom);
                   strcpy(tab[i].numTel,tab[*nbContact].numTel);
                   strcpy(tab[i].mel,tab[*nbContact].mel);
                   //on enleve un contact
                   *nbContact--;
                   printf("Les donnees ont ete supprimees");
     }
     getch();
}
     

//+++++++++++++++++++++++++
//Fonction Verification adresse mail
//+++++++++++++++++++++++++++
int verifMel(char *mel)
{
    int i=0,correct=0;
    for(i=0;i<(strlen(mel));i++)
    {
                              if(mel[i]=='@')
                              {
                                             if(mel[(strlen(mel)-3)]=='.')//accès au 3eme caractere en partant de la fin de l'adresse mail
                                             {
                                                                        correct=1;
                                             }
                              }
    }
    return correct;
}


//++++++++++++++++++++++++++++
//Fonction Creation Fiche
//++++++++++++++++++++++++++++
void creationFiche(int *nbContact)
{
       int static i=0, correct=0;
       system("cls");
       puts("Creation Fiche Contact");
       puts("Nom : ");
       scanf("%s", &tab[i].nom);
       puts("Prenom : ");
       scanf("%s", &tab[i].prenom);
       do
       {
                   puts("Numero de telephone : ");
                   scanf("%s", &tab[i].numTel);
       }while(strlen(tab[i].numTel)!=10); //test si le nombre de chiffre saisie est de 10 à l'aide de la longueur de la chaine
       do
       {
                                        puts("Adresse mail : ");
                                        scanf("%s", &tab[i].mel);
                                        correct=verifMel(tab[i].mel);
       }while(correct!=1);
       *tab[i].motdepasse=1;
       printf("Les informations concernant %s %s ont ete enregistrees", tab[i].nom, tab[i].prenom);
       i=i+1;
       *nbContact=i;
       getch();
}


//++++++++++++++++++++++++++++++++++++++++++
//Procedure Consultation Fiche
//++++++++++++++++++++++++++++++++++++++
void consulterFiche(int *nbContact)
{
     int i=0,ecriture=0;
     char choix[20],motdepasse[9];
     system("cls");
     nomPresent(nbContact);
     puts("Veuillez saisir le nom de la personne dont vous souhaitez lire la fiche");
     scanf("%s", &choix);
     for(i=0;i<*nbContact;i++)
     {
                     if(strcmp(tab[i].nom,choix)==0)
                     {
                                                    if(strlen(tab[i].motdepasse)>1)
                                                    {
                                                                                   printf("Mot de passe : ");
                                                                                   fflush(stdin);
                                                                                   gets(motdepasse);
                                                                                   if(strcmp(motdepasse,tab[i].motdepasse)==0)
                                                                                   {
                                                                                                                              printf("%s\n%s\n%s\n%s\n", tab[i].nom, tab[i].prenom, tab[i].numTel, tab[i].mel);
                                                                                                                              ecriture=1;
                                                                                   }
                                                    }
                                                    else{
                                                         printf("%s\n%s\n%s\n%s\n", tab[i].nom, tab[i].prenom, tab[i].numTel, tab[i].mel);
                                                         ecriture=1;
                                                         }
                     }
     }
     if(ecriture!=1)
     puts("Erreur de saisie");
     getch();
}

  
//++++++++++++++++++++++
//Procedure cryptageFiche
//++++++++++++++++++++++++
void cryptageFiche(int *nbContact)
{
     int i=0;
     char motdepasse1[9],nomSaisi[20];
     system("cls");
     nomPresent(nbContact);
     puts("De quelle personne voulez vous crypter les coordonnees");
     scanf("%s", &nomSaisi);
     for(i=0;i<*nbContact;i++)
     {
                             if(strcmp(nomSaisi,tab[i].nom)==0)
                             break;
     }
     do
     {
     puts("Veuillez entrer un mot de passe maximum 8 caracteres");
     fflush(stdin);
     scanf("%s",&motdepasse1);
     puts("Confirmer mot de passe : ");
     fflush(stdin);
     scanf("%s",&tab[i].motdepasse);
     }while(strcmp(motdepasse1,tab[i].motdepasse)!=0);
     printf("Le mot de passe est confirme pour l'acces aux coordonnees de %s %s", tab[i].nom, tab[i].prenom);
     getch();
}


//+++++++++++++++++++++++++
//Procedure ModificationFiche
//+++++++++++++++++++++++
void modificationFiche(int *nbContact)
{
     int i=0,correct=0;
     char nomSaisi[20];
     system("cls");
     nomPresent(nbContact);
     puts("De quelle personne souhaitez vous modifier les coordonnees ?");
     scanf("%s", &nomSaisi);
     //Recherche de l'indice du nom
     for(i=0;i<*nbContact;i++)
     {
                             if(strcmp(nomSaisi,tab[i].nom)==0)
                             break;
     }
     if(i<*nbContact)//Le nom a été trouvé
     {
                          printf("Veuillez saisir les nouvelles informations concernant %s %s\n", tab[i].nom, tab[i].prenom);
                          puts("Nom : ");
                          scanf("%s", &tab[i].nom);
                          puts("Prenom : ");
                          scanf("%s", &tab[i].prenom);
                          do
                          {
                                      puts("Numero de telephone : ");
                                      scanf("%s", &tab[i].numTel);
                          }while(strlen(tab[i].numTel)!=10); //test si le nombre de chiffre saisie est de 10 à l'aide de la longueur de la chaine
                          do
                          {
                                        puts("Adresse mail : ");
                                        scanf("%s", &tab[i].mel);
                                        correct=verifMel(tab[i].mel);
                          }while(correct!=1);
                        printf("Les informations concernant %s %s ont ete modifiees", tab[i].nom, tab[i].prenom);
     }
     else{printf("Le nom trouve n'apparait pas dans la liste de vos contacts");}
     getch();
}


//+++++++++++++++++++++++++++++
//Procedure Suppression
//+++++++++++++++++++++++++++++
void suppressionCarnet(int *nbContact)
{
     int reponse=0;
     system("cls");
     puts("Appuyez sur 1 pour confirmer la supression du carnet");
     scanf("%d", &reponse);
     if(reponse==1)
     {
                   *nbContact=0;
                   puts("Les donnees ont ete effacees");
     }
     getch();
}
     

//+++++++++++++++++++++++++++++++++++
//Proocedur Enregistrement
//++++++++++++++++++++++++++++++++++++++++++
void enregistrement(int *nbContact)
{
     FILE *fichier = NULL;
     int i=0;
     fichier=fopen(chemin,"w"); //w pour ecraser l'ancien enregistrement
     if (fichier != NULL)
     {
                 fprintf(fichier,"%d",*nbContact);
                 fprintf(fichier,"\n");
                 for(i=0;i<*nbContact;i++)
                 {
                                           fprintf(fichier,tab[i].nom);
                                           fprintf(fichier,"\n");
                                           fprintf(fichier,tab[i].prenom);
                                           fprintf(fichier,"\n");
                                           fprintf(fichier,tab[i].numTel);
                                           fprintf(fichier,"\n");
                                           fprintf(fichier,tab[i].mel);
                                           fprintf(fichier,"\n");
                                           fprintf(fichier,tab[i].motdepasse);
                                           fprintf(fichier,"\n");
                 }
     }
     fclose(fichier);
}


//++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Procedure fichier Variable qui copie le contenu des fichiers dans des variables
//++++++++++++++++++++++++++++++++++++++++++++++++++++
void fichierVariable(int *nbContact)
{
          FILE *fichier = NULL; //initialisation du pointeur de fichier
          char chaine[taille];
          int i=0,j=0;
          fichier=fopen(chemin,"r");//lecture seule
          if(fichier!=NULL)
          {
                           while(feof(fichier))
                           {
                                                fflush(stdin);
                                                fgets(chaine,taille,fichier);
                                                *nbContact=atoi(chaine);
                                                for(j=0;j<*nbContact;j++)
                                                {
                                                                        for(i=0;i<4;i++)//4 car il y a 5 champs ds la structure
                                                                        {
                                                                                           fflush(stdin);
                                                                                           fgets(chaine,taille,fichier);
                                                                                           strcpy(tab[i].nom,chaine);
                                                                                           fflush(stdin);
                                                                                           fgets(chaine,taille,fichier);
                                                                                           strcpy(tab[i].prenom,chaine);
                                                                                           fflush(stdin);
                                                                                           fgets(chaine,taille,fichier);
                                                                                           strcpy(tab[i].numTel,chaine);
                                                                                           fflush(stdin);
                                                                                           fgets(chaine,taille,fichier);
                                                                                           strcpy(tab[i].mel,chaine);
                                                                                           fflush(stdin);
                                                                                           fgets(chaine,taille,fichier);
                                                                                           strcpy(tab[i].motdepasse,chaine);
                                                                        }
                                                }
                           }
          }
          fclose(fichier);
}
                                                                                           
                                                                                           

//++++++++++++++++++++++++++
//Procedure Menu
//++++++++++++++++++++++++++
void menu()
{
     int choix=0,nbContact=0;
     fichierVariable(&nbContact);
     do{
         system("cls");
         puts("Que voulez vous faire?\n\n\t1 : Creer une fiche contact\n\t2 : Consulter une fiche\n\t3 : Ajouter et mettre a jour une fiche\n\t4 : Modifier une fiche\n\t5 : Supprimer une fiche\n\t6 : Supprimer votre carnet d'adresse\n\t7 : Afficher le nombre de vos contacts\n\t8 : Crypter un fichier\n\t9 : Decrypter un fichier\n\t10 : Quitter\n"); 
         scanf("%d", &choix);      //on ne teste pas car la condition est testée avec le default du switch     
     switch(choix)
     {
                  case 1 : 
                       {
                           creationFiche(&nbContact);
                       }
                       break;
                  case 2 : 
                       {
                           consulterFiche(&nbContact);
                       }
                       break;
                  case 3 : 
                       {
                           ;
                       }
                       break;
                  case 4 : 
                       {
                           modificationFiche(&nbContact);
                       }
                       break;
                  case 5 : 
                       {
                           suppressionFiche(&nbContact);
                       }
                       break;
                  case 6 : 
                       {
                           suppressionCarnet(&nbContact);
                       }
                       break;
                  case 7 : 
                       {
                           printf("Il y a %d contacts dans votre repertoire", nbContact);
                           getch();
                       }
                       break;
                  case 8 : 
                       {
                           cryptageFiche(&nbContact);
                       }
                       break;
                  case 9 : 
                       {
                           decryptageFichier(&nbContact);
                       }
                       break;
                  case 10 : 
                            ;
                       break;
                  default : ;
     }
     }while(choix!=10);
     if(&nbContact>0)
     enregistrement(&nbContact);
}


//++++++++++++++++++++++++++
//Programme principal
//++++++++++++++++++++++++++
main(void)
{ 
          presentation();
          menu();
          getch();
          return 0;
}

2 réponses

Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384
2 avril 2008 à 14:25
Bonjour,

Je pense que l'erreur se trouve dans la ligne de code suivante
while(feof(fichier))
car
feof(fichier)
est vrai lorsque l'on est à la fin du fichier, je pense que tu voulais faire le contraire, donc ici la boucle while n'est jamais exécutée.

A plus
0
didy_gwatinik Messages postés 352 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 30 mars 2010 80
2 avril 2008 à 14:27
C'est tout à fait ca!!!!
Merci beaucoup Christounet!!!!!!
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384
2 avril 2008 à 14:31
De rien, on est là pour s'entraider.

A plus
0