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
|
#include <stdio.h> // ok linux
#include <stdlib.h> //
#include <time.h> //
#include <string.h>
int main()
{
int nbre_personnes, i = 0;
char *prenom_personnes[50]; // Tableau de 50 pointeurs de type char * ( potentiellement 50 prenoms )
int *ptr_age_personnes = NULL;
printf("\n Combien de personnes sont ici présentes ? ");
scanf("%d", &nbre_personnes);
if (nbre_personnes > 0)
{
// Ici il y a un probleme, tu ne connais pas encore le nombre de caractere pour "prenom_personnes" pour allouer de la memoire
// De plus ton allocation est fausse ce serait plutot pour le premier prenom : "prenom_personnes[0]" Tu as 50 pointeurs, donc ici ce sera de 0 à 49 pour l'indice
// Pour recuperer les prenoms tu devrais utiliser fgets, car scanf faut le maitriser. Prototypes : char * fgets( char * string, int maxLength, FILE * stream ); Ici à la place de stream tu indiques stdin pour ton clavier
// Tes allocations doivent etre faites au moment ou tu recuperes les prenoms
// Tu peux aussi utiliser la fonction strnlen pour connaitre le nombre de caractere entrer par l'utilisateur en fixant une limite pour la taille devant etre allouer et prevoir + 1 pour le caractere de fin de chaine
*prenom_personnes = malloc(nbre_personnes * sizeof (int)); // Ici tu alloues le nombre de personnes multiplier par la taille d'un int, sa ne va pas
ptr_age_personnes = malloc(nbre_personnes * sizeof (int));
if (nbre_personnes == 0)
{
exit(0);
}
for (i = 0; i < nbre_personnes ; i++)
{
printf("\n Quel est le prénom de la personne %d ? ", i + 1);
scanf("%s", prenom_personnes[i]);
}
for (i = 0; i < nbre_personnes ; i++)
{
printf("\n Quel âge a %s ? ", prenom_personnes[i]);
scanf("%d", &ptr_age_personnes[i]);
}
for (i = 0; i < nbre_personnes ; i++)
{
printf("\n %s a %d an%c ", prenom_personnes[i], ptr_age_personnes[i], ptr_age_personnes[i] > 1 ? 's' : ' ');
}
free(ptr_age_personnes); // Un seul malloc est libéré, un messages d'erreur s'affiche dans l'ide si j'essaye de libérer le second.
printf("\n");
}
return 0;
} |
Partager