Salut à tous,

J'ai un problème pour lequel je désire votre aide. Voilà, il me faut écrire un program qui lit 3 fichiers de donnés:


employees.txt qui contient les rubriques suivantes: no_emp, nom, taux
Contenu:
001 John 19.75325
002 Nacha 17.60125
003 Mark 18.12356
004 Alain 20.82431
005 Solange 16.25634




Wk13102009.txt : avec no_emp, jour1, jour2, jour3,jour4, jour5
Contenu:
001 9 9 9 10 9
002 9 9 8 8 9
003 9 9 9 9 9
004 7 8 8 9 9
005 9 9 9 9 9




GeneralPay.txt : no_emp, paie_cumulee, taxe_cumulee, a_deduct_cumulee
(les montants sont du type float avec 6 positions après la virgule)
Contenu:
001 114563.367188 38200.050781 12115.719727
002 99397.281250 29632.150391 7111.390137
003 103297.453125 30184.080078 10095.730469
004 120938.453125 41424.019531 14081.179688
005 90438.250000 21437.169922 5678.950195



et qui crée un quatrième fichier PaieSemaineCourante.txt, écrit les rubriques nécessaires et mets à jour le fichier GeneralPay.txt après traitement des donnés.

Le mode d'accès à tous les fichiers est séquentiel.

Veuillez, s'il vous plait, en m'aidant considérer que mon niveau en programmation est encore de débutant.

Toutefois, j'ai pu écrire le programme que je soumets ci-dessous, mais il ne semble pas tourner correctement. Les données résultant de l'éxécution sont erronées, donc contraire à celles escomptées et l'écriture sur les fichiers ressemble plutôt à du charabia ...
Faut-il appliquer un formatage pour l'écriture sur fichier??

Après éxécution, je reçois le message d'erreur suivant: "Run-Time Check Failure #2 - Stack around the variable "no_emp" was corrupted"
Qu'est-ce que cela veut dire?

Aussi, si vous pouvez me pointer sur la bonne direction concernant de la documentation sur le sujet (manipulation des fichiers aussi bien l'accès séquentiel que l'accès direct)pour que j'approfondisse mes connaissances. Merci à tous.


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
115
116
117
118
119
120
121
122
123
124
/*Lire trois fichiers de données et écrire sur un quatrième fichier*/
 
 
 
#include<stdio.h>
#include<stdlib.h>
 
float paie(char*, float, float); /* function prototype */
 
int main(void)
{
	char no_emp[4], nom[11]; 
	int jour1, jour2, jour3, jour4, jour5;
	float taux, salaire_brut, taxe, a_deduct, salaire_net, paie_cumulee, taxe_cumulee, a_deduct_cumulee, nbr_heures;  
 
	FILE *fp1, *fp2, *fp3, *fp4;   
	/*
		fp1 = fopen ("employees.txt")
		fp2 = fopen ("GeneralPay.txt")
		fp3 = fopen ("Wk11102009.txt")
		fp4 = fopen ("PaieSemaineCourante.txt")
 
	*/
 
	/* fopen ouvre le fichier. Exit le pgm en cas de problème */
	if ((fp3 = fopen("Wk13102009.txt", "r")) == NULL)
	{
		printf("\n\tImpossible de lire Wk13102009.txt\n");
	}
	else
	{	
		if ((fp1 = fopen("employees.txt", "r")) == NULL)
			{
				printf("\n\tImpossible de lire employees.txt\n");
			}
		else
		{
			if ((fp2 = fopen("GeneralPay.txt", "r+")) == NULL)
				{
					printf("\n\tImpossible de lire GeneralPay.txt\n");
				}
			else
			{
				if ((fp4 = fopen("PaieSemaineCourante.txt", "a")) == NULL)
						{
							printf("\n\tImpossible de lire PaieSemaineCourante.txt.txt.\n");
						}
						else
						{
 
 
							while (!feof(fp3))
							{
 
 
								fscanf(fp3, "%s%d%d%d%d%d", no_emp, &jour1, &jour2, &jour3, &jour4, &jour5);
								fscanf(fp1, "%s%s%f",   no_emp, nom, &taux);
								fscanf(fp2, "%s%f%f%f", no_emp, &paie_cumulee, &taxe_cumulee, &a_deduct_cumulee );
 
								nbr_heures = jour1 + jour2 + jour3 + jour4 + jour5;
 
								salaire_brut = paie( no_emp, nbr_heures, taux);
 
								taxe = salaire_brut * 0.30;
 
								a_deduct = salaire_brut * 0.08;
 
								salaire_net = salaire_brut - taxe - a_deduct;
 
								//mise à jour des donnes cumulées dans GeneralPay.txt
								paie_cumulee += salaire_net;
								taxe_cumulee += taxe;
								a_deduct_cumulee += a_deduct;
 
								//écrire une ligne dans le fichier PaieSemaineCourante.txt
								fprintf(fp4, "%s %s %.5f %2d %.5f %.2f %.2f %.2f%.2f\n", no_emp, nom, taux, 
									nbr_heures, salaire_brut, salaire_net, paie_cumulee, taxe_cumulee, a_deduct_cumulee);
 
								//écrire une ligne GeneralPay.txt
								fprintf(fp2, "%s%.2f %.2f %.2f\n", no_emp, paie_cumulee, taxe_cumulee, a_deduct_cumulee);
 
                              	//remise des variables à zéro
								nbr_heures = 0;
								salaire_brut = 0;
								taxe = 0;
								a_deduct = 0;
								salaire_net = 0;
 
 
							}//fin de la boucle while
							fclose(fp2);
							fclose(fp1);
							fclose(fp4);
 
 
				}
			}
 
		fclose(fp3);	
		}
 
	}
	printf("Program terminé sans normalement !\n\n\n");
	system("pause");
	return 0;
 
}
 
 
 
float paie( char *no_empo, float nbr_heures, float taux)
{
 
	float s_brut;
 
 
 
		s_brut = nbr_heures * taux;
 
 
 
	return (s_brut);
 
}