projprog/C12.1.c
2021-11-12 17:15:53 +01:00

87 lines
1.6 KiB
C

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#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, 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 && (*dest)[i]!='\n';i++){}
(*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");
printf("Initiales : ");
while(scanfs(&initiales,IntLength)){};
printf("Âge : ");
scanf("%d", &age);
getchar();
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<N;i++){
demander(persos+i);
description(persos+i);
}
for(int i=1;i<N;i++){
for(int j=0;j<i;j++){
if(lesmeme(persos+i,persos+j)){
printf("Alerte doublon !\n");
description(persos+i);
}
}
}
}