diff --git a/banque.c b/banque.c index 33e0136..99d261a 100644 --- a/banque.c +++ b/banque.c @@ -314,24 +314,18 @@ int categorie(const Transaction *t) return categorie_positive(t); } -/* F10 : ajoute une ligne à la fin du rapport */ -int longueur(const char *s) +/* F10 : ajoute une ligne à la fin du rapport en conservant sa position */ +void ajouter_ligne(char *rapport, int *fin, const char *ligne) { - int n = 0; - while (s[n] != '\0') - n++; - return n; -} - -void ajouter_ligne(char *rapport, const char *ligne) -{ - int fin = longueur(rapport); int i = 0; + while (ligne[i] != '\0') { - rapport[fin + i] = ligne[i]; + rapport[*fin + i] = ligne[i]; i++; } - rapport[fin + i] = '\0'; + + *fin += i; + rapport[*fin] = '\0'; } /* ------------------------------------------------------------------ */ @@ -354,6 +348,7 @@ int main(void) int *index = malloc(NB_TRANSACTIONS * sizeof(int)); char *rapport = malloc(1 << 20); char ligne[128]; + int fin_rapport = 0; if (t == NULL || index == NULL || rapport == NULL) { fprintf(stderr, "Erreur d'allocation mémoire.\n"); @@ -401,30 +396,30 @@ int main(void) /* rapport */ snprintf(ligne, sizeof(ligne), "clients distincts;%d\n", nb_clients); - ajouter_ligne(rapport, ligne); + ajouter_ligne(rapport, &fin_rapport, ligne); snprintf(ligne, sizeof(ligne), "somme des requetes;%ld\n", somme_requetes); - ajouter_ligne(rapport, ligne); + ajouter_ligne(rapport, &fin_rapport, ligne); snprintf(ligne, sizeof(ligne), "meilleure periode;%d;%d;%ld\n", debut, fin, meilleure); - ajouter_ligne(rapport, ligne); + ajouter_ligne(rapport, &fin_rapport, ligne); snprintf(ligne, sizeof(ligne), "paires opposees;%ld\n", nb_paires); - ajouter_ligne(rapport, ligne); + ajouter_ligne(rapport, &fin_rapport, ligne); snprintf(ligne, sizeof(ligne), "facons de rendre %d;%ld\n", MONTANT_MONNAIE, nb_facons); - ajouter_ligne(rapport, ligne); + ajouter_ligne(rapport, &fin_rapport, ligne); for (int c = 0; c < 12; c++) { snprintf(ligne, sizeof(ligne), "categorie;%d;%d\n", c, categories[c]); - ajouter_ligne(rapport, ligne); + ajouter_ligne(rapport, &fin_rapport, ligne); } for (int c = 0; c < NB_CLIENTS; c++) { snprintf(ligne, sizeof(ligne), "client;%d;%ld\n", c, totaux_clients[c]); - ajouter_ligne(rapport, ligne); + ajouter_ligne(rapport, &fin_rapport, ligne); } for (int j = 0; j < NB_JOURS; j++) { snprintf(ligne, sizeof(ligne), "jour;%d;%ld\n", j, totaux_jours[j]); - ajouter_ligne(rapport, ligne); + ajouter_ligne(rapport, &fin_rapport, ligne); } for (int i = 0; i < NB_TRANSACTIONS; i += 10) { snprintf(ligne, sizeof(ligne), "rang;%d;%d;%ld\n", i, t[i].id, t[i].montant); - ajouter_ligne(rapport, ligne); + ajouter_ligne(rapport, &fin_rapport, ligne); } FILE *f = fopen("rapport.txt", "w");