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
| #include <stdio.h> // ok linux
#include <stdlib.h> //
#include <time.h> //
#include <string.h> //
#ifdef __linux__
#define CLEAR system("clear"); // efface l'écran sous linux
#elif _WIN64
#define CLEAR system("cls"); // efface l'écran sous windows
#endif
//#define CLEAR system("clear||cls"); // efface le texte à la console sous linux et windows, risque de ub ou pas ? N'ai pas encore eu de soucis avec.
int main()
{
unsigned int nbre_personnes; // j'ai des warning si cette variable n'est pas de ce type...
int main_error_line = 0; // erreur dans le main() ligne...
size_t i;
char **ptr_prenom_personnes = NULL;
int *ptr_age_personnes = NULL;
printf("\n Combien de personnes sont ici présentes ? ");
scanf("%d", &nbre_personnes);
ptr_prenom_personnes = calloc(nbre_personnes, sizeof(*ptr_prenom_personnes));
if (ptr_prenom_personnes == NULL)
{
main_error_line = 20; // j'ai en tête la création automatique d'un fichier (fopen...) reportant la ligne d'où proviendrait l'erreur, ah! les bug report
goto lol; // goto envoyé ligne 62
}
ptr_age_personnes = malloc(nbre_personnes * sizeof(int));
if (ptr_age_personnes == NULL)
{
main_error_line = 27;
goto lol; // goto envoyé ligne 62
}
for (i = 0; i < nbre_personnes ; i++)
{
ptr_prenom_personnes[i] = malloc(30 * sizeof(*ptr_prenom_personnes[i])); // en effet, j'ai négligé ce point mentionné dans vos derniers postes, 30 caractères sont alloués et je crains de ne pas être protégé contre le dépassement de mémoire, vivement le chapitre sur la saisie de texte avec fgets...
if (ptr_prenom_personnes[i] == NULL)
{
main_error_line = 37;
goto lol; // goto envoyé ligne 62
}
printf("\n Personne %lu , quel est votre prénom ? ", i + 1);
scanf("%s", ptr_prenom_personnes[i]);
// faire se suivre les 2 questions, tellement plus logique, c'est fait
printf("\n %s quel âge avez-vous ? ", ptr_prenom_personnes[i]);
scanf("%d", &ptr_age_personnes[i]);
}
CLEAR // effacement du texte à la console
for (i = 0; i < nbre_personnes ; i++)
{
printf("\n %s , vous avez %d an%c.", ptr_prenom_personnes[i], ptr_age_personnes[i], ptr_age_personnes[i] > 1 ? 's' : ' ');
}
// libération de la mémoire allouée ci-après
lol: // goto reçus des lignes 27, 34, 44
if (ptr_prenom_personnes != NULL)
for (i = 0; i < nbre_personnes; i++)
{
free(ptr_prenom_personnes[i]);
}
free(ptr_prenom_personnes);
free(ptr_age_personnes);
printf("\n");
return main_error_line == 0 ? EXIT_SUCCESS : EXIT_FAILURE; // un ternaire + return, waouh !
} |
Partager