diff --git a/banque.c b/banque.c index da5a186..d51afdc 100644 --- a/banque.c +++ b/banque.c @@ -219,24 +219,14 @@ int categorie(const Transaction *t) } } -/* F10 : ajoute une ligne à la fin du rapport */ -int longueur(const char *s) +/* F10 : ajoute une ligne à la fin du rapport. On passe la position du '\0' + * final et on renvoie la nouvelle : plus besoin de recalculer la longueur. */ +char *ajouter_ligne(char *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]; - i++; - } - rapport[fin + i] = '\0'; + while (*ligne != '\0') + *fin++ = *ligne++; + *fin = '\0'; + return fin; } /* ------------------------------------------------------------------ */ @@ -259,6 +249,7 @@ int main(void) char *rapport = malloc(1 << 20); char ligne[128]; rapport[0] = '\0'; + char *fin_rapport = rapport; /* position du '\0' final du rapport */ /* recherches par id, dans l'ordre d'origine */ long somme_requetes = 0; @@ -292,30 +283,30 @@ int main(void) /* rapport */ snprintf(ligne, sizeof(ligne), "clients distincts;%d\n", nb_clients); - ajouter_ligne(rapport, ligne); + fin_rapport = ajouter_ligne(fin_rapport, ligne); snprintf(ligne, sizeof(ligne), "somme des requetes;%ld\n", somme_requetes); - ajouter_ligne(rapport, ligne); + fin_rapport = ajouter_ligne(fin_rapport, ligne); snprintf(ligne, sizeof(ligne), "meilleure periode;%d;%d;%ld\n", debut, fin, meilleure); - ajouter_ligne(rapport, ligne); + fin_rapport = ajouter_ligne(fin_rapport, ligne); snprintf(ligne, sizeof(ligne), "paires opposees;%ld\n", nb_paires); - ajouter_ligne(rapport, ligne); + fin_rapport = ajouter_ligne(fin_rapport, ligne); snprintf(ligne, sizeof(ligne), "facons de rendre %d;%ld\n", MONTANT_MONNAIE, nb_facons); - ajouter_ligne(rapport, ligne); + fin_rapport = ajouter_ligne(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); + fin_rapport = ajouter_ligne(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); + fin_rapport = ajouter_ligne(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); + fin_rapport = ajouter_ligne(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); + fin_rapport = ajouter_ligne(fin_rapport, ligne); } FILE *f = fopen("rapport.txt", "w");