Bonjour je développe un annuaire de saisie du nom âgé et numéro de téléphone dans un fichier. Jusque pas de problèmes mais je n'arrive pas à en faire la lecture correct.

Voici mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
 
 
FILE* f = NULL; // Creation d'un fichier global
 
// Définition d'une structure en globale
typedef struct annuaire annuaire; // Le programme reconnaitra directement annuaire comme une structure
 
struct annuaire{
    char Nom[21];
    char NumeroTel[15]; // On ajoute +1 pour le caractère d'échappement '/0'
	int Age;
};
 
 
void partie1Saisie() // Appel de la saisie partie 1
{
	system("cls"); // On éfface l'écran
 
	// On présente ici l'exercice
	printf("________________________________________________\n");
	printf("Partie 1 - Fichier sequentiel :\n");
	printf("------------------------------------------------\n");
	printf("Saisir et enregistrer\n");
	printf("------------------------------------------------\n\n");
 
	// Déclaration & Initialisation des variables
	annuaire UnAnnuaire = {"", "", 0}; // On initialise l'instanciation de struct annuaire
	char ajoutContact = NULL;
	char initAnnuaire = NULL;
 
// DEBUT
	printf("Souhaitez vous initialiser l'annuaire ? [i]\nSaisissez une touche pour continuer..\n\n Votre choix : ");
	fflush(stdin); // On vide le flux
	scanf("%c", &initAnnuaire);
	if (initAnnuaire == 'i')
	{
		printf("\n	**  Annuaire initialise  **\n\n");
	}
		else
		{
			printf("\n	**  Ouverture de l'annuaire en mode append (ajout)  **\n\n");
		}
	printf("------------------------------------------------\n\n");
 
	if (initAnnuaire == 'i')
	{
		f = fopen("fichiers\\annuaire.txt", "w+"); // Ouverture en écriture + initialisation
		// Le pointeur "f" devient alors un pointeur sur "annuaire.txt"
	}
		else
		{
			f = fopen("fichiers\\annuaire.txt", "a"); // Ouverture en écriture ajout (append)
		}
 
	if (f != NULL) // On verifie bien que le fichier a été crée
	{
		nouveauContact();
 
		printf("\n\nAjouter un contact a l'annuaire [o]\nSaisissez une touche pour continuer..\n\n Votre choix : ");
		fflush(stdin); // On vide le flux
		scanf("%c", &ajoutContact);
		printf("------------------------------------------------\n\n");
 
		while (ajoutContact == 'o')
		{
			nouveauContact();
 
			printf("\n\nAjouter un contact a l'annuaire [o]\nSaisissez une touche pour continuer..\n\n Votre choix : ");
			fflush(stdin); // On vide le flux
			scanf("%c", &ajoutContact);
			printf("------------------------------------------------\n\n");
		}
	}
		else
		{
			printf("Impossible d'ouvrir le fichier");
		}
 
	fclose(f); // Fermeture du fichier
 
// FIN
}
 
 
void nouveauContact() // "void partie1Saisie();"
{
	// Declaration & Initialisation des variables
	//char age[10]; // variable permettant de transtyper l'age dans une chaine de caractère
	annuaire UnAnnuaire;
 
// DEBUT
	printf("_____________Nouveau Contact : \n\n");
 
	// Saisie du NOM
	printf("\nNom (max 20 caracteres) : ");
	scanf("%s", UnAnnuaire.Nom);
	printf("                         --------------------\n");
 
	// Saisie de l'AGE
	printf("Age : ");
	scanf("%d", &UnAnnuaire.Age);
	printf("     ---\n");
 
	//sprintf(age, "%d", UnAnnuaire.Age); // Transtype Age de UnAnnuaire dans une chaine de caractère 'age'
 
	// Saisie du NUMERO DE TELEPHONE
	printf("Numero de telephone (xx-xx-xx-xx-xx) : ");
	scanf("%s", UnAnnuaire.NumeroTel);
	printf("                                     --------------\n");
 
	fprintf(f,"%s;;%d;;%s\n", UnAnnuaire.Nom,  UnAnnuaire.Age, UnAnnuaire.NumeroTel); // On copie dans le fichier
 
// FIN
}
Jusque la l'enregistrement des coordonnées est tres bien enregistrer dans mon fichier.

C'est la ou sa merde un peu

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
void partie1Lire() // Appel de la lecture partie 1
{
	system("cls"); // On éfface l'écran
 
	// On présente ici l'exercice
	printf("________________________________________________\n");
	printf("Partie 1 - Fichier sequentiel :\n");
	printf("------------------------------------------------\n");
	printf("Lecture du fichier\n");
	printf("------------------------------------------------\n\n");
 
	// Déclaration & Initialisation des variables
	annuaire UnAnnuaire;
	int lectureok = 0;
 
// DEBUT
 
    printf("Annuaire : \n\n");
 
    f = fopen("fichiers\\annuaire.txt", "r"); // Ouverture en mode lecture "read"
 
	printf("Nom			Age		Numero de telephone\n\n");
 
    do
    {
        lectureok=fscanf(f,"%s			%d		%s\n", &UnAnnuaire.Nom, &UnAnnuaire.Age, &UnAnnuaire.NumeroTel);
        if (lectureok==1) printf("%s			%d		%s\n", &UnAnnuaire.Nom, &UnAnnuaire.Age, &UnAnnuaire.NumeroTel);
 
    } while (lectureok==1);
 
    fclose(f); // Fermeture du fichier
 
// FIN
}
La lecture s'effectue, mais j'obtiens ma chaine de caractère complète dès le premier "%s" et j'aimerais que ce soit bien séparer, je ne trouve pas comment crée ma fonction séparateur ";;".

Merci