#include #include #include #define N 5 #define NumLength (10+4+1) #define IntLength (8) typedef struct personne personne; struct personne{ int age; char* initiales; char* num; }; void description(personne* p){ printf("%s, agé de %d ans est joignable au %s \n",p->initiales, p->age, p->num); } int scanfs(char* dest, int length){ if(fgets(dest, length-1, stdin)==NULL){ return 1;// Une erreur est survenue lors de la lecture (trop long ?) } // On doit supprimer le retour à la ligne qu'a capturé fgets. int i; for(i=0;i=length){// On a Overflow // On nettoie les caracteres ecrits en trop while( (!strchr(dest,'\n')) && (!strchr(dest,EOF))) if(!fgets(dest, length-1,stdin)) break; return 2; } dest[i] = '\0'; return 0; } void demander(personne* p){ int age; char* initiales = malloc(IntLength*sizeof(char)); if(initiales==NULL)return; char* num = malloc(NumLength*sizeof(char)); if(num==NULL){free(initiales);return;} printf("Création d'une nouvelle personne : \n"); do{ printf("Initiales : "); } while(scanfs(initiales,IntLength)); printf("Âge : "); scanf("%d", &age); getchar(); do { printf("Numéro de téléphone : "); } while(scanfs(num, NumLength)); p->initiales = initiales; p->age = age; p->num = num; } int lesmeme(personne* p1, personne* p2){ return (p1->age==p2->age) && (strcmp(p1->initiales, p2->initiales)==0) && (strcmp(p1->num, p2->num)==0); } int main(){ personne persos[N]; for(int i=0;i