Correction des erreurs
Idriss SALL
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
je besoin d'un coup de pouce. En faite le programme s'execute mais le probleme se trouve vers l'affichage de resultat (ça ne donne pas le resultat voulu).
je vous remercie d'avance.
voici le code:
je besoin d'un coup de pouce. En faite le programme s'execute mais le probleme se trouve vers l'affichage de resultat (ça ne donne pas le resultat voulu).
je vous remercie d'avance.
voici le code:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> typedef struct { int id,cpt; char Nom[20], Prenom[20]; }candidat; typedef struct { int nbrv,idc; char Nom[20]; }centre; void creation(int nbca, int nbcen) { candidat ca[nbca]; centre cen[nbcen]; FILE *fca; FILE *vce; int i; fca=fopen("listcandidat.csv","w"); vce=fopen("votecentre.csv","w"); if(fca!=NULL) { for(i=0;i<nbca;i++) { printf("veuillez saisir le numero du candidat %d :",i+1); scanf("%d",&ca[i].id); ca[i].cpt=0; fflush(stdin); printf("veuillez saisir le Nom du candidat :"); gets(ca[i].Nom); printf("veuillez saisir le Prenom du candidat :"); gets(ca[i].Prenom); puts(" "); } fwrite(ca,sizeof(candidat),nbca,fca); fclose(fca); } if(vce!=NULL) { puts("\n"); for(i=0;i<nbcen;i++) { printf("veuillez saisir le numero du centre :"); scanf("%d",&cen[i].idc);fflush(stdin); printf("veuillez saisir le Nom du centre :"); gets(cen[i].Nom); printf("veuillez saisir le nombre des votants :"); scanf("%d",&cen[i].nbrv); puts(" "); } fwrite(cen, sizeof(centre),nbcen,vce); fclose(vce); } } void tricandidat(int nbc,candidat ca[])//Sous programmes permettent de trie un tableau de type candidat { int k,h,cpt; candidat tmp; for(k=0;k<nbc-1;k++) { for(h=k+1;h<nbc;h++) { if(ca[k].cpt>ca[h].cpt) { tmp.cpt=ca[h].cpt; tmp.id=ca[h].id; strcpy(tmp.Nom,ca[h].Nom ); strcpy(tmp.Prenom,ca[h].Prenom ); ca[h].id=ca[k].id; ca[h].cpt=ca[k].cpt; strcpy(ca[h].Nom,ca[k].Nom ); strcpy(ca[h].Prenom,ca[k].Prenom ); ca[k].cpt=tmp.id; ca[k].cpt=tmp.cpt; strcpy(ca[k].Nom,tmp.Nom ); strcpy(ca[k].Prenom,tmp.Prenom ); } } } } void vote(int nbca,int nbcen) { candidat ca[nbca]; centre cen[nbcen]; int i,j,tmp,p,q; char nomfichier[20][20]; FILE *fca; FILE *vce; FILE *fb,*fc; fc=fopen("resultcentre.csv","w"); vce=fopen("votecentre.csv","r"); puts("\n"); if(vce!=NULL) { fread(cen, sizeof(centre),nbcen,vce); fclose(vce); for(j=0;j<nbcen;j++) { printf("Nom fichier de centre\n"); fflush(stdin);//fichier contenant le resultat par centre gets(nomfichier[j]); fca=fopen("listcandidat.csv","r"); if(fca!=NULL) { fread(ca,sizeof(candidat),nbca,fca); }fclose(fca); fb=fopen(nomfichier[j],"w"); while(cen[j].nbrv>1) { printf("l'identifiant du centre No%d\n",cen[j].idc); printf("les nombres des votants sont %d\n",cen[j].nbrv); printf("Le nom du centre est %s\n",cen[j].Nom); for(i=0;i<nbca;i++) { printf("l'identifiant du candidat est %d\n",ca[i].id); printf("Le nom est %s\n",ca[i].Nom); printf("Le prenom est %s\n",ca[i].Prenom); } puts("\n"); //Votez printf("Entrez le numero du candidat choisit\n"); scanf("%d",&tmp); for(i=0;i<nbca;i++) { if(tmp==ca[i].id) { ca[i].cpt++; } } cen[j].nbrv--; } if(cen[j].nbrv==1) { int k; tricandidat(nbca,ca); printf("le resultat apres tri\n"); for(k=0;k<nbca;k++) { printf("id cdd %d\n",ca[k].id); puts(ca[k].Nom); puts(ca[k].Prenom); } fwrite(ca,sizeof(candidat),nbca,fb); fclose(fb); } } fwrite(nomfichier,sizeof(char),nbcen,fc); fclose(fc); } } void affiche(int nbc,candidat ca[]) { int l; for(l=0;l<nbc;l++) { printf("Voici le resultat selon ordre merite ",l+1); printf(" le numero,le Nom et le Prenom sont:%d,%s,%s\n",ca[l].id,ca[l].Nom,ca[l].Prenom); } } void resultat(int nbca, int nbcen) { candidat ca[nbca],result[nbca]; centre cen[nbcen]; char cenresult[nbcen][20]; FILE *fc,*fd,*ff,*fcv; fc=fopen("resultcentre.csv","r"); //ok fcv=fopen("votecentre.csv","r"); //ok ff=fopen("resulfinal.csv","w"); //ok int i,j,k; fread(cenresult,sizeof(char),nbcen,fc);//le nom ts les fichiers bureau fclose(fc); fread(cen,sizeof(centre),nbcen,fcv); fclose(fcv); for(j=0;j<nbcen;j++) { fd=fopen(cenresult[j],"r"); //ok fread(ca,sizeof(candidat),nbca,fd); fclose(fd); if(j==0) { for(i=0;i<nbca;i++) { result[i].id=ca[i].id; result[i].cpt=ca[i].cpt; strcpy(result[i].Nom,ca[i].Nom ); strcpy(result[i].Prenom,ca[i].Prenom ); } } else { for(i=0;i<nbca;i++) { for(k=0;k<nbca;k++) { if(result[i].id=ca[k].id) result[i].cpt=result[i].cpt+ca[k].cpt; } } } for(i=0;i<nbca;i++) { if(i==nbca-1) { printf("Vainqueur du centre N° %d\n",i+1); printf("Son identite est %d \t",ca[i].id); puts(ca[i].Prenom); puts(ca[i].Nom); } } } tricandidat(nbca,result); int l; for(l=0;l<nbca;l++) { printf("Voici le resultat selon ordre de merite ",l+1); printf(" le numero,le Nom,Prenom : %d,%s,%s\n",result[l].id,result[l].Nom,result[l].Prenom); } fwrite(result,sizeof(candidat),nbca,ff); fclose(ff); } main() { int nbca,nbcen; printf("veuillez saisir le nombre de centre :"); scanf("%d",&nbcen); printf("veuillez saisir le nombre de candidat :"); scanf("%d",&nbca); puts("\n"); creation(nbca,nbcen); vote(nbca,nbcen); resultat(nbca,nbcen); }
A voir également:
- Correction des erreurs
- Votre appareil ne dispose pas des correctifs de qualité et de sécurité importants - Guide
- Activer correction automatique android - Guide
- Telecharger clavier français avec correction - Télécharger - Divers Utilitaires
- Le correcteur automatique de votre smartphone vous rend fou ? Voici comment le désactiver - Accueil - Mobile
- Mode correction word - Guide
1 réponse
Bonjour,
#include<conio.h>
Non standard. A ne pas mettre.
main()
Le bon prototype est : int main(void)
Et il ne faut pas oublier : return 0; en fin du main().
candidat ca[nbca];
centre cen[nbcen];
Correct mais déconseillé. Tu utilises un mécanisme apporté par la nouvelle norme. Donc il faut t'assurer que ton compilateur est compliant ISO C99 et respecte le VLA... Ou alors, et je te le conseille, tu utilises les pointeurs et les alloues avec un malloc() => Ca sera plus portable.
Pareil pour les lignes similaires.
fflush(stdin);
Comportement non défini. A ne pas utiliser. Si tu veux vider le buffer clavier, il faut ce faire la fonction soi-même (utilisation de while getchar() sur EOF ou '\n').
gets(ca[i].Nom);
Fonction obsolète. A ne pas utiliser. Utilise plutôt fgets(). Attention, cela met un '\n' dans la variable. A toi de voir si tu souhaites la supprimer ou la garder. Pour la supprimer il suffit de le remplacer par un '\0' (strchr()).
Voilà pour les erreurs qui m'ont sauté aux yeux. Corrige déjà tout ça et reposte ton code en uniformisant l'indentation si possible.
Cdlt,
#include<conio.h>
Non standard. A ne pas mettre.
main()
Le bon prototype est : int main(void)
Et il ne faut pas oublier : return 0; en fin du main().
candidat ca[nbca];
centre cen[nbcen];
Correct mais déconseillé. Tu utilises un mécanisme apporté par la nouvelle norme. Donc il faut t'assurer que ton compilateur est compliant ISO C99 et respecte le VLA... Ou alors, et je te le conseille, tu utilises les pointeurs et les alloues avec un malloc() => Ca sera plus portable.
Pareil pour les lignes similaires.
fflush(stdin);
Comportement non défini. A ne pas utiliser. Si tu veux vider le buffer clavier, il faut ce faire la fonction soi-même (utilisation de while getchar() sur EOF ou '\n').
gets(ca[i].Nom);
Fonction obsolète. A ne pas utiliser. Utilise plutôt fgets(). Attention, cela met un '\n' dans la variable. A toi de voir si tu souhaites la supprimer ou la garder. Pour la supprimer il suffit de le remplacer par un '\0' (strchr()).
Voilà pour les erreurs qui m'ont sauté aux yeux. Corrige déjà tout ça et reposte ton code en uniformisant l'indentation si possible.
Cdlt,