[C] Probleme, je ne vois pas d'erreur !!!

Fermé
ollie314 Messages postés 145 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 26 octobre 2007 - 8 juin 2006 à 01:58
 cyril - 8 juin 2006 à 16:06
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

3 réponses

ollie314 Messages postés 145 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 26 octobre 2007 80
8 juin 2006 à 04:17
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°
0
Bonjour!
J’ai 2 problèmes sur Excel et je voudrais bien de l'aide.
Existe t-il une fonction qui puisse afficher 1 question automatiquement dès que l'on rentre un enregistrement?

Existe t-il une fonction pour afficher dans 1 cellule la date de sauvegarde du fichier?

Merci de m'aider
0
ollie314 Messages postés 145 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 26 octobre 2007 80
8 juin 2006 à 15:27
Bonjour,

Je crois que tu t'es trompé, ce n'est pas sur un post, mais sur le forum qu'il faut poster.

sinon, je ne peux pas répondre à ta question ...
Désolé

Amicalement

Ollie314
0
BONJOUR
MERCI QUEND MEME!
0