Encore qqs problèmes dans mon programme en C... Pouvez-vous m'aider?

Encore qqs problèmes dans mon programme en C... Pouvez-vous m'aider? - C - Programmation

Marsh Posté le 09-04-2004 à 14:09:34    

J'ai réalisé mon programme mais il y a qqs problèmes, pouvez-vous m'aider?  
 
La dernière page , qui doit indiquer que j'ai réalisé ce programme ne s'affiche pas lors de la saisie 0 (aussi , j'aimerais que cela s'affiche en bleu)  
 
Ensuite, pour la recheche par code postal : si deux personnes ont le même code postal, ce programme n'indique qu'une seule personne !  
 
J'espère que vous me suivez!  
 
 
---------------------------------------------  
 
Voici :  
 
#include<stdio.h>  
#include<conio.h>  
#include<stdlib.h>  
#include<string.h>  
 
 
struct s_personne  
{  
char nom[25];  
char prenom[20];  
char rue[25];  
int num;  
short cp;  
char loc[25];  
short age;  
char sexe;  
int taille;  
int poids;  
};  
 
void main()  
 
{  
int choix;  
struct s_personne tab_pers[30];  
struct s_personne tmp;  
int i=0, cptsexe=0, cptage=0, cpttaille=0, cptpoids=0, cpt18=0, cpt=0;  
int j,k,nbr,ligne;  
int totsexe=0, tottaille=0, totpoids=0, menu=1;  
int codepost;  
while (menu==1)  
{  
 
clrscr();  
gotoxy(5,2); printf("** MENU **" );  
gotoxy(5,3); printf(" **** " );  
gotoxy(18,6); printf("1: Encodage" );  
gotoxy(18,7); printf("-----------" );  
gotoxy(18,10); printf("2: Statistique" );  
gotoxy(18,11); printf("--------------" );  
gotoxy(18,14); printf("3: Recherche par Code Postal" );  
gotoxy(18,15); printf("----------------------------" );  
gotoxy(18,1; printf("4: Recherche des personnes majeures" );  
gotoxy(18,19); printf("-----------------------------------" );  
gotoxy(18,22); printf("0: Quitter" );  
gotoxy(18,23); printf("----------" );  
gotoxy(55,25); printf(" Entrez votre choix : " ); scanf("%d",&choix);  
 
while ((choix!=0) && (choix!=1) && (choix!=2) && (choix!=3) && (choix !=4))  
{  
gotoxy(3,26);  
printf("ERREUR -> Entrer une option valable" );  
getch();  
gotoxy(3,26); clreol();  
gotoxy(3,26); printf("\nEntrer votre choix : " ); scanf("%d",&choix);  
}  
switch(choix)  
{  
case 1:  
i=0;  
tab_pers[i].nom[0]='v';  
while(i<30 && tab_pers[i].nom[0] != '*')  
{  
clrscr();  
gotoxy(20,2);printf("** Encodage **" );  
gotoxy(20,3);printf(" ********" );  
gotoxy(5,5); printf("Nom: \t" );  
fflush(stdin);  
gets(tab_pers[i].nom);  
if(tab_pers[i].nom[0] != '*')  
{  
gotoxy(5,7); printf("Prenom: \t" );  
fflush(stdin);  
gets(tab_pers[i].prenom);  
cpt++;  
gotoxy(5,9); printf("Rue: \t" );  
fflush(stdin);  
gets(tab_pers[i].rue);  
gotoxy(5,11); printf("Num?ro: \t" );  
fflush(stdin);  
scanf("%d",&tab_pers[i].num);  
gotoxy(5,13); printf("Code Postal: \t" );  
fflush(stdin);  
scanf("%d",&tab_pers[i].cp);  
gotoxy(5,15); printf("Localite: \t" );  
fflush(stdin);  
gets(tab_pers[i].loc);  
gotoxy(5,17); printf("Age: \t" );  
fflush(stdin);  
scanf("%d",&tab_pers[i].age);  
while(tab_pers[i].age<7 || tab_pers[i].age>77)  
{  
gotoxy(2,24);  
printf("Erreur d'encodage : L'?ge doit ?tre compris entre 7 et 77 ans" );  
getch();  
gotoxy(2,24); clreol();  
gotoxy(5,17); printf("Age: \t" );  
fflush(stdin);  
scanf("%d",&tab_pers[i].age);  
}  
if(tab_pers[i].age>=1  
{  
cptage=cptage+1;  
}  
else  
{  
cpt18=cpt18+1;  
}  
gotoxy(5,19); printf("Sexe: \t" );  
fflush(stdin);  
scanf("%c",&tab_pers[i].sexe);  
while(tab_pers[i].sexe!='h' && tab_pers[i].sexe!='f')  
{  
gotoxy(3,24); printf("Erreur d'encodage: Entrer F ou H pour le sexe de la personne" );  
getch();  
gotoxy(3,24); clreol();  
gotoxy(5,19); printf("Sexe: \t" );  
fflush(stdin);  
scanf("%c",&tab_pers[i].sexe);  
}  
if (tab_pers[i].sexe=='h')  
{  
totsexe=totsexe+1;  
}  
else  
{  
cptsexe++;  
}  
gotoxy(5,21); printf("Taille (cm): \t" );  
fflush(stdin);  
scanf("%d",&tab_pers[i].taille);  
while(tab_pers[i].taille<100 || tab_pers[i].taille>250)  
{  
gotoxy(3,24); printf("Erreur d'encodage: La taille doit ?tre comprise entre 140 et 250" );  
getch();  
gotoxy(3,24); clreol();  
gotoxy(5,21); printf("Taille (cm): \t" );  
fflush(stdin);  
scanf("%d",&tab_pers[i].taille);  
}  
if (tab_pers[i].taille>=180)  
{  
tottaille=tottaille+1;  
}  
else  
{  
cpttaille++;  
}  
 
gotoxy(5,23); printf("Poids (kg): \t" );  
fflush(stdin);  
scanf("%d", &tab_pers[i].poids);  
while(tab_pers[i].poids<1 || tab_pers[i].poids>140)  
{  
gotoxy(3,25); printf("Erreur d'encodage: Le poids doit ?tre compris entre 1 et 140" );  
getch();  
gotoxy(3,24); clreol();  
gotoxy(5,23); printf("Poids (kg): \t" );  
fflush(stdin);  
scanf("%d",&tab_pers[i].poids);  
}  
if (tab_pers[i].poids>=1)  
{  
totpoids=totpoids+1;  
}  
else  
{  
cptpoids++;  
}  
i++;  
}  
 
}  
 
break;  
 
case 2: clrscr();  
gotoxy(20,2);printf("** STATISTIQUE **" );  
gotoxy(20,3);printf (" *********** " );  
gotoxy(3,6);printf("Nombre d'hommes : ____________________________________ %d",totsexe);  
gotoxy(3,;printf("Nombre de femmes : ___________________________________ %d",cptsexe);  
gotoxy(3,10);printf("Nombre de personnes majeures : _______________________ %d",cptage);  
gotoxy(3,12);printf("Nombre de personnes mineures : _______________________ %d",cpt18);  
gotoxy(3,14);printf("Nombre de personnes dont la taille est <1m80 :________ %d",cpttaille);  
gotoxy(3,16);printf("Nombre de personnes dont la taille est >= 1m80 :______ %d",tottaille);  
gotoxy(3,1;printf("Nombre de personnes dont le poids est <= 100kg;_______ %d",totpoids);  
gotoxy(3,20);printf("Nombre de personnes dont le poids est >100kg:_________ %d",cptpoids);  
getch();  
break;  
 
case 3: clrscr();  
gotoxy(20,2);printf("** RECHERCHE PAR CODE POSTAL **" );  
gotoxy(20,3);printf(" ************************* " );  
gotoxy(3,7);printf("Entrez Code Postal : " );  
scanf("%d",&codepost);  
for(i=0;i<=cpt;i++)  
{  
if(tab_pers[i].cp==codepost)  
{  
gotoxy(3,9);printf(" %s %s\n",tab_pers[i].nom,tab_pers[i].prenom);  
}  
}  
getch();  
break;  
case 4: clrscr();  
gotoxy(20,2);printf("** RECHERCHE DES PERSONNES MAJEURES **" );  
gotoxy(20,3);printf(" ******************************** " );  
for(j=1;j<cpt-2;j++)  
{  
for(k=0;k<j;k++)  
{  
if(strcmp(tab_pers[k].nom,tab_pers[j].nom)>0)  
{  
strcpy(tmp.nom,tab_pers[k].nom);  
strcpy(tmp.prenom,tab_pers[k].prenom);  
tmp.age=tab_pers[k].age;  
strcpy(tmp.rue,tab_pers[k].rue);  
tmp.num=tab_pers[k].num;  
tmp.cp=tab_pers[k].cp;  
strcpy(tmp.loc,tab_pers[k].loc);  
tmp.sexe=tab_pers[k].sexe;  
tmp.taille=tab_pers[k].taille;  
tmp.poids=tab_pers[k].poids;  
 
strcpy(tab_pers[k].nom,tab_pers[j].nom);  
strcpy(tab_pers[k].prenom,tab_pers[j].prenom);  
tab_pers[k].age=tab_pers[j].age;  
strcpy(tab_pers[k].rue,tab_pers[j].rue);  
tab_pers[k].num=tab_pers[j].num;  
tab_pers[k].cp=tab_pers[j].cp;  
strcpy(tab_pers[k].loc,tab_pers[j].loc);  
tab_pers[k].sexe=tab_pers[j].sexe;  
tab_pers[k].taille=tab_pers[j].taille;  
tab_pers[k].poids=tab_pers[j].poids;  
 
strcpy(tab_pers[j].nom,tmp.nom);  
strcpy(tab_pers[j].prenom,tmp.prenom);  
tab_pers[j].age=tmp.age;  
strcpy(tab_pers[j].rue,tmp.rue);  
tab_pers[j].num=tmp.num;  
tab_pers[j].cp=tmp.cp;  
strcpy(tab_pers[j].loc,tmp.loc);  
tab_pers[j].sexe=tmp.sexe;  
tab_pers[j].taille=tmp.taille;  
tab_pers[j].poids=tmp.poids;  
}  
}  
}  
 
nbr=1;  
ligne=5;  
for(j=0;j<cpt;j++)  
{  
if(tab_pers[j].age>=1  
{  
if(nbr<16)  
 
{  
gotoxy(4,ligne);puts(tab_pers[j].nom);  
gotoxy(30,ligne);puts(tab_pers[j].prenom);  
ligne++;  
}  
else  
{  
ligne--;  
gotoxy(40,16-ligne);puts(tab_pers[j].nom);  
gotoxy(65,16-ligne);puts(tab_pers[j].prenom);  
 
}  
nbr++;  
}  
}  
 
getch();  
break;  
 
case 0: /* quitter */  
clrscr();  
menu=0;  
gotoxy(20,10);printf("ce prog a ete realise par C.M." );  
 
break;  
 
}  
 
 
}  
 
}  
 
 
----------------------------------------------------  
 
Merci de m'aider.
 
Saylia.

Reply

Marsh Posté le 09-04-2004 à 14:09:34   

Reply

Marsh Posté le 09-04-2004 à 14:29:05    

pas mal tes fflush(stdin); ...
 
encore mieux les gets ...

Reply

Marsh Posté le 15-04-2004 à 13:29:55    

Pour le code postal tu fais gotoxy(3,9) tu reecris donc sur la meme ligne
je pense. Il n'y aura donc qu'un nom d'affiche a la fin. Il faut decaler  
d'une ligne entre chaque nom trouve.

Reply

Marsh Posté le 16-04-2004 à 21:08:47    

ouai je le pense aussi dans ce cas il suffit de déclarer 1 variable qui est incrémenté a chaque nom trouvé et pour ton affichage il n'y a pas d'attente donc si tu le lance a partir d'une fenetre dos forcement tu ne pas voir le résultat donc rajoute un getchar(); juste avant le dernier break

Reply

Marsh Posté le 16-04-2004 à 21:17:48    

Code :
  1. strcpy(tmp.nom,tab_pers[k].nom); 
  2. strcpy(tmp.prenom,tab_pers[k].prenom); 
  3. tmp.age=tab_pers[k].age; 
  4. strcpy(tmp.rue,tab_pers[k].rue); 
  5. tmp.num=tab_pers[k].num; 
  6. tmp.cp=tab_pers[k].cp; 
  7. strcpy(tmp.loc,tab_pers[k].loc); 
  8. tmp.sexe=tab_pers[k].sexe; 
  9. tmp.taille=tab_pers[k].taille; 
  10. tmp.poids=tab_pers[k].poids; 
  11. strcpy(tab_pers[k].nom,tab_pers[j].nom); 
  12. strcpy(tab_pers[k].prenom,tab_pers[j].prenom); 
  13. tab_pers[k].age=tab_pers[j].age; 
  14. strcpy(tab_pers[k].rue,tab_pers[j].rue); 
  15. tab_pers[k].num=tab_pers[j].num; 
  16. tab_pers[k].cp=tab_pers[j].cp; 
  17. strcpy(tab_pers[k].loc,tab_pers[j].loc); 
  18. tab_pers[k].sexe=tab_pers[j].sexe; 
  19. tab_pers[k].taille=tab_pers[j].taille; 
  20. tab_pers[k].poids=tab_pers[j].poids; 
  21. strcpy(tab_pers[j].nom,tmp.nom); 
  22. strcpy(tab_pers[j].prenom,tmp.prenom); 
  23. tab_pers[j].age=tmp.age; 
  24. strcpy(tab_pers[j].rue,tmp.rue); 
  25. tab_pers[j].num=tmp.num; 
  26. tab_pers[j].cp=tmp.cp; 
  27. strcpy(tab_pers[j].loc,tmp.loc); 
  28. tab_pers[j].sexe=tmp.sexe; 
  29. tab_pers[j].taille=tmp.taille; 
  30. tab_pers[j].poids=tmp.poids;

s'eu été trop facile d'utiliser l'affecation entre structure ...

Reply

Marsh Posté le 16-04-2004 à 21:43:56    

ouai c sur que cela aurait été plus simple de ne pas passer par une autre structure temporaire mais bon ca ne doit pas être le seul truc optimisable au niveau du code et ca ne résout en rien le problème ;-)

Reply

Marsh Posté le 16-04-2004 à 23:38:34    

non mais complexifier le code en utilisant 30 lignes au lieu de 3, ça détourne l'attention sur des conneries, de telles sorte que tu nages dans ton code

Reply

Marsh Posté le 17-04-2004 à 11:43:17    

Taz a écrit :

non mais complexifier le code en utilisant 30 lignes au lieu de 3, ça détourne l'attention sur des conneries, de telles sorte que tu nages dans ton code


Je vais peut-être dire une connerie ...
Pourquoi ne pas utiliser la fonction qsort (en écrivant la fonction de comparaison qui va bien) ?

Reply

Marsh Posté le 17-04-2004 à 15:12:26    

darkoli a écrit :


Je vais peut-être dire une connerie ...
Pourquoi ne pas utiliser la fonction qsort (en écrivant la fonction de comparaison qui va bien) ?

ben parce que l'intérêt c'est clairement d'écrire un programme foireux le plus long possible

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed