tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017
-
2 juil. 2009 à 21:09
tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017
-
4 juil. 2009 à 10:49
J'ai écris un programme en C qui fusionne deux fichiers avec la même structure d'employés et ordonnés par ordre alphabétique croissant des noms. J'ai mis le code en bas. J'ai un problème avec la fonction fread, elle ne fait pas avancer séquentiellement la lecture dans les deux fichiers à fusionner pour lire. Quelqu'un pourrait m'aider SVP. Merci
**************************************************
#include <stdio.h>
#include <ctype.h>
#include <string.h>
char t;
int main()
{
typedef
struct
{
char nom[40];
int age;
char sexe[1];
char fonction[20];
}Employe;
cs_Chouchou182
Messages postés252Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention25 avril 20111 3 juil. 2009 à 10:45
Bonjour,
Ce test est toujours vrai:
(e1.nom != "0")
Ces adresses que tu compares sont définies à la compilation et ne peuvent changer au cours de l'exécution du programme. Utilise strcmp pour comparer le contenu de chaînes de caractères, comme tu le fais ailleurs.
Les fonctions fread, fwrite, scanf renvoient des valeurs. Il faut étudier la valeur de retour. cf. man 3 pour plus de détails.
tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017 3 juil. 2009 à 15:01
Merci Chouchou pour ta réponse rapide. Oui j'ai rectifié selon tes remarques. Mon problème reste toujours que la fonction fread ne fait pas avancer vers l'enregistrement suivant, ce qui fait que le programme reste bloqué sur le premier enregistrement et boucle!!!
tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017 3 juil. 2009 à 15:34
Re bonjour Chouchou,
Ca y est j'ai résolu mon problème. En fait, il fallait utiliser la fonction fseek avant chaque fread et ça a marché. Donc d'après ce que je comprends, il faut se positionner sur l'enregistrement puis le lire avec fread.
fseek(fich, sizeof(e)*num, SEEK_SET); // avec num le rang de l'enregistrement dans le fuchier.
tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017 4 juil. 2009 à 10:49
Oui c'est peut être possible avec le teste de fin de fichier, sauf que mes deux fichiers à fusionner se terminent avec un nom égale à zéro. C'est plutôt ça mon test de fin de fichier.