#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 nextLine(){ int c; while ((c = getchar()) != '\n' && c != EOF) { }; } void demander(personne* p){ int age; char* initiales = calloc(IntLength,sizeof(char)); if(initiales==NULL)return; char* num = calloc(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 : "); if(scanf("%d", &age)!=1){ printf("Ce n'est pas un nombre, je met 42 dans le doute\n"); nextLine(); age = 42; } else getchar(); do { printf("Numéro de téléphone : "); } while(scanfs(num, NumLength)); p->initiales = initiales; p->age = age; p->num = num; } void freePerso(personne* perso){ free(perso->initiales); free(perso->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