[C] Probleme, je ne vois pas d'erreur !!!
ollie314
Messages postés
145
Date d'inscription
Statut
Membre
Dernière intervention
-
cyril -
cyril -
Bonjour,
Voilà, je dois faire une petite correction pour un ami, seulement je ne vois pas d'erreur.
Pourtant, lorsque je fais une recherche sur le nom de la personne dans l'agenda, le programme ne li aucune ligne (il renvoi tout de suite fin de fichier),pourant lorsque je liste ce même fichier, je trouve trois entré dont une correspondant à mon critère de recherche.
Voici la fonction qui ne fonctionne pas (: )
void searchByNom(){
char nom[150];
contact ct;
FILE *handle;
int lect;
int trouve=0; /* 0 => pas trouvé / 1 => trouvé */
int curs=0; /* si il existe plusieurs contact portant le même nom ... */
/* saisie du critère de recherche */
printf("Veuillez saisir le nom svp : ");
scanf("%s",nom);
printf("\n");
/* on commence la recherche */
handle = fopen(FIC,READ);
/* test de l'ouverture du fichier */
if(handle == NULL)
{
/* erreur d'ouverture du fichier */
printf("ERREUR !!! impossible de lire dans le fichier \n");
}
else
{ /* fichier ouvert correctement */
while(1)
{
/* on lit dans le fichier */
lect = fread(&ct,sizeof(contact),1,handle);
/* on test si on est à la fin du fichier */
if(feof(handle))
{ /* si fin du fichier */
printf("*** Fin du fichier ***\n");
/* on sort */
break;
} /* if */
/* on teste si la lecture s'est bien déroulé */
if(lect == 0)
{
/* problème lors de la lecture */
printf("*** Problème lors de la lecture dans le fichier ***\n");
/* on sort */
break;
} /* if */
/* si on est pas sorti, on lit les données */
/* on teste si le nom lu est le même que le nom saisi */
if(ct.nom == nom)
{ /* si ils sont égaux */
curs++;
/* on imprime */
printf("%d - nom : %s\nprenom : %s\nmail : %s\n",curs,ct.nom,ct.prenom,ct.mail);
/* on met trouve à 1 si il n'y est pas déjà */
if(trouve == 0)
{
trouve = 1; /* ou trouve++; au choix */
} /* if */
} /* if */
} /* while */
/* si trouve est égal a 0 */
if(trouve ==0)
{
/* aucun contact trouve .. */
printf("Aucun contact portant ce nom ne figure dans votre agenda\n");
} /* if */
else
{
/* on donne le nombre de contact trouvé */
printf("Total : %d contact(s) portant ce nom dans votre agenda\n",curs);
} /* else */
} /* else */
} /* searchByNom */
Et voici la fonction qui lit le fichier et dresse la liste des contact qui elle fonctionne.
void list(void){
FILE *handle;
contact ct;
int lect;
int i=0;
extern int nb;
nb = countct();
printf("Vous allez lister les contacts de l'agenda\n");
printf("\n");
if(nb != -1 && nb != 0){
printf("Il y a %d contact(s) dans votre agenda ...\n\n",nb);
}
if(nb!=0)
{
printf("***********************************************************\n");
printf("*** id\tnom\t\tprenom\t\tmail\t\t***\n");
printf("***-----------------------------------------------------***\n");
}
/* ouverture du fichier ... */
handle = fopen(FIC,READ);
if(handle == NULL)
{
printf("ERREUR !!! Impossible d'ouvrir le fichier ...\n");
}
else
{
/* traitement ... */
while(1)
{
lect = fread(&ct,sizeof(contact),1,handle);
if(feof(handle)){break;} /* fin du fichier */
if(lect == 0){printf("Problème durant la lecture du fichier ...\n");break;}
i++;
printf("*** %d\t%s\t\t%s\t\t%s\t***\n",i,ct.nom,ct.prenom,ct.mail);
} /* while */
if(nb == 0)
{
printf("Il n'y a aucun contact dans votre agenda ...\n");
}
else
{
printf("***********************************************************\n");
}
}/* else */
}/*list */
Si vous voyez ce qui cloche, je vous serai reconnaissant, je ne vois aucune erreur, le seul problème est à mon avis un problème de caractère (programme initialoement conçut sous linux et actuellement compilé avec DevC++ dans sa version 4.9.9.2)
Amicalement
Ollie314
Voilà, je dois faire une petite correction pour un ami, seulement je ne vois pas d'erreur.
Pourtant, lorsque je fais une recherche sur le nom de la personne dans l'agenda, le programme ne li aucune ligne (il renvoi tout de suite fin de fichier),pourant lorsque je liste ce même fichier, je trouve trois entré dont une correspondant à mon critère de recherche.
Voici la fonction qui ne fonctionne pas (: )
void searchByNom(){
char nom[150];
contact ct;
FILE *handle;
int lect;
int trouve=0; /* 0 => pas trouvé / 1 => trouvé */
int curs=0; /* si il existe plusieurs contact portant le même nom ... */
/* saisie du critère de recherche */
printf("Veuillez saisir le nom svp : ");
scanf("%s",nom);
printf("\n");
/* on commence la recherche */
handle = fopen(FIC,READ);
/* test de l'ouverture du fichier */
if(handle == NULL)
{
/* erreur d'ouverture du fichier */
printf("ERREUR !!! impossible de lire dans le fichier \n");
}
else
{ /* fichier ouvert correctement */
while(1)
{
/* on lit dans le fichier */
lect = fread(&ct,sizeof(contact),1,handle);
/* on test si on est à la fin du fichier */
if(feof(handle))
{ /* si fin du fichier */
printf("*** Fin du fichier ***\n");
/* on sort */
break;
} /* if */
/* on teste si la lecture s'est bien déroulé */
if(lect == 0)
{
/* problème lors de la lecture */
printf("*** Problème lors de la lecture dans le fichier ***\n");
/* on sort */
break;
} /* if */
/* si on est pas sorti, on lit les données */
/* on teste si le nom lu est le même que le nom saisi */
if(ct.nom == nom)
{ /* si ils sont égaux */
curs++;
/* on imprime */
printf("%d - nom : %s\nprenom : %s\nmail : %s\n",curs,ct.nom,ct.prenom,ct.mail);
/* on met trouve à 1 si il n'y est pas déjà */
if(trouve == 0)
{
trouve = 1; /* ou trouve++; au choix */
} /* if */
} /* if */
} /* while */
/* si trouve est égal a 0 */
if(trouve ==0)
{
/* aucun contact trouve .. */
printf("Aucun contact portant ce nom ne figure dans votre agenda\n");
} /* if */
else
{
/* on donne le nombre de contact trouvé */
printf("Total : %d contact(s) portant ce nom dans votre agenda\n",curs);
} /* else */
} /* else */
} /* searchByNom */
Et voici la fonction qui lit le fichier et dresse la liste des contact qui elle fonctionne.
void list(void){
FILE *handle;
contact ct;
int lect;
int i=0;
extern int nb;
nb = countct();
printf("Vous allez lister les contacts de l'agenda\n");
printf("\n");
if(nb != -1 && nb != 0){
printf("Il y a %d contact(s) dans votre agenda ...\n\n",nb);
}
if(nb!=0)
{
printf("***********************************************************\n");
printf("*** id\tnom\t\tprenom\t\tmail\t\t***\n");
printf("***-----------------------------------------------------***\n");
}
/* ouverture du fichier ... */
handle = fopen(FIC,READ);
if(handle == NULL)
{
printf("ERREUR !!! Impossible d'ouvrir le fichier ...\n");
}
else
{
/* traitement ... */
while(1)
{
lect = fread(&ct,sizeof(contact),1,handle);
if(feof(handle)){break;} /* fin du fichier */
if(lect == 0){printf("Problème durant la lecture du fichier ...\n");break;}
i++;
printf("*** %d\t%s\t\t%s\t\t%s\t***\n",i,ct.nom,ct.prenom,ct.mail);
} /* while */
if(nb == 0)
{
printf("Il n'y a aucun contact dans votre agenda ...\n");
}
else
{
printf("***********************************************************\n");
}
}/* else */
}/*list */
Si vous voyez ce qui cloche, je vous serai reconnaissant, je ne vois aucune erreur, le seul problème est à mon avis un problème de caractère (programme initialoement conçut sous linux et actuellement compilé avec DevC++ dans sa version 4.9.9.2)
Amicalement
Ollie314
A voir également:
- [C] Probleme, je ne vois pas d'erreur !!!
- Je ne vois pas tous les amis en commun sur facebook - Forum Facebook
- Pourquoi je ne vois plus les publications d'un ami facebook - Forum Facebook
- Je ne vois pas ma story snapchat ✓ - Forum Snapchat
- Ma story n'affiche pas les vues ni les screens - Forum Réseaux sociaux
- Pourquoi je ne vois plus actif il y a ✓ - Forum Facebook Messenger
3 réponses
Re,
Bon on la fait come la dernière :)
J'ai trouvé ce qui clochait.
Pour ceux que ça interessse. Le lieur avait quelquesproblèmes. La bibliothèque string.h ne fonctionnait pas (c'étati un peu plus vicieux, le compilateur ne renvoyait aucune erreur mais la fonction ne devait pas être appelée).
Pour résoudre le problème, j'ai du effacer tous les fichier decpp de mon ordi (base de regsitre compris, ce qui n'est pas une mince affaire pour un adepte du monde Unix à 500% :), mais ça ce fait) et j'ai réinstallé.
Note : Pour ceux qui rencontre des problèmes avec devCpp, il faut réinstaller le logiciel en initialisnt le lieur (l'opération prends du temps mais les résultats ont l'air correct ...).
A priori, lorsque l'on veu initialiser des API dont le logiciel ne dispose pas en natif, il faut les télécharger et les copier dans un répertoire où vous consignerez toutes les fichier d'en tête (cela suppose d'avoir préalablement installé DevCpp sur le Disque et copier le repertoire include ou mieux de diposer d'un compilateur voisin). Pour ma part j'ai installé les includes de TC et le tout semble assez bien fonctionner.
Voilà, pour changer j'ai été des plus obscur, pour ceux qui voudraient des précisions, même si je ne pense pas avoir découvert là une chose révolutionnaire, rendez vous sur le post !! ;)
Amicalement
Ollie314.
Quand l'Ollie dort l' "AU LIT !!!" veille. :o°
Bon on la fait come la dernière :)
J'ai trouvé ce qui clochait.
Pour ceux que ça interessse. Le lieur avait quelquesproblèmes. La bibliothèque string.h ne fonctionnait pas (c'étati un peu plus vicieux, le compilateur ne renvoyait aucune erreur mais la fonction ne devait pas être appelée).
Pour résoudre le problème, j'ai du effacer tous les fichier decpp de mon ordi (base de regsitre compris, ce qui n'est pas une mince affaire pour un adepte du monde Unix à 500% :), mais ça ce fait) et j'ai réinstallé.
Note : Pour ceux qui rencontre des problèmes avec devCpp, il faut réinstaller le logiciel en initialisnt le lieur (l'opération prends du temps mais les résultats ont l'air correct ...).
A priori, lorsque l'on veu initialiser des API dont le logiciel ne dispose pas en natif, il faut les télécharger et les copier dans un répertoire où vous consignerez toutes les fichier d'en tête (cela suppose d'avoir préalablement installé DevCpp sur le Disque et copier le repertoire include ou mieux de diposer d'un compilateur voisin). Pour ma part j'ai installé les includes de TC et le tout semble assez bien fonctionner.
Voilà, pour changer j'ai été des plus obscur, pour ceux qui voudraient des précisions, même si je ne pense pas avoir découvert là une chose révolutionnaire, rendez vous sur le post !! ;)
Amicalement
Ollie314.
Quand l'Ollie dort l' "AU LIT !!!" veille. :o°