|
Problème retour tableau fonction
le 02/05/2008 12:59:00

acidjackproject
|
Bnjour, voilà j'explique mon probleme: J'ai une fonction recherche qui parcours un index (tableau de structure). Lorsqu'elle a trouvé l'élément elle me demande si je veux le modifé. Si je le modifie elle passe a la fonction modifié l'index a la position de l'objet recherché. Dans cette fonction, je peux soit modifié la nom (et donc l'index) ou non (si non je ne modifie pas l'index puisque ce dernier est trié par ordre alphabétique). Je modifie le nom, le programme rentre alors dans la fonction supprimerElement index puis me réindex le nouvel élément. après tout cela je teste et mon index est bien trié. OK. Mais voila mon problème: juste après la fonction modifié la position de l'index n'est pas le premier élément du tableau alors qu'a la sortie de la fonction c'est bien le premier element qui est pointé. voici le code j'espere m'être bien fait comprendre: Merci d'avance Julien void recherche(struct produit *produit, int *nproduit, FILE *fproduit, struct ind *index) { char buf[29],modif; int i,r,j; printf("Rechercher un produit.\n\n");
if(*nproduit==0) { printf("Il n'y a pas de produit encode.\n"); system("pause"); } else { printf("Quel produit voulez-vous rechercher? "); gets(buf); for(j=0;j<*nproduit && stricmp(buf,index->NomProduit)!=0;j++,index++); if(j<*nproduit) { fproduit=fopen("Produit.dat","rb"); fseek(fproduit,index->Posi*sizeof(struct produit),SEEK_SET); fread(produit,sizeof(struct produit),1,fproduit); fclose(fproduit);
printf(" Numero du produit: %ld\n",produit->NumProduit); printf(" Nom: %s\n",produit->NomProduit); printf(" Unite de mesure: %s\n",produit->UniteMesure); printf(" Prix: %.2f euros\n",produit->Prix); printf(" Type: %s\n",produit->TypeProduit); printf(" Dangerosite: %d\n\n",produit->Categorie); do { fflush(stdin); printf("Voulez-vous modifier ou supprimer [%s]:\n\t\t1: Modifier\n\t\t2: Supprimer",produit->NomProduit); modif=getch(); printf("\n"); if(modif!='1' && modif!='2') { printf("Veuillez entrer 1 pour modifer ou 2 pour supprimer"); fflush(stdin); getch(); gotoxy(0,13); for(i=0;i<80;i++) { printf(" "); } r=strlen(produit->NomProduit)+29; gotoxy(r,10); for(i=0;i<60;i++) { printf(" "); } gotoxy(0,10); } } while(modif!='1' && modif!='2');
if(modif=='1') { modifProduit(produit,j,*nproduit,fproduit,index); puts((index)->NomProduit); system("pause"); for(j=0;j<*nproduit;j++) puts((index+j)->NomProduit); system("pause"); } else { //Supprimer } } else { printf("Desole, le produit n'existe pas.\n"); system("pause"); } } system("cls"); } /***********************************************************************/ /* INPUT: Nombre de produit, structure index */ /* structure produit, pointeur du fichier Produit.dat */ /* PROCESS: modifier un produit dans le fichier */ /* OUTPUT: */ /***********************************************************************/ void modifProduit(struct produit *produit,int depl,int nproduit, FILE *fproduit, struct ind *index) { char buf[56],modif; int k=0,i=0,j=0,r; int g=0; struct ind temp;
do { fflush(stdin); printf("Voulez-vous modifier le nom du produit (o/n): "); modif=getch(); printf("\n"); if(modif!='o' && modif!='n') { printf("Veuillez entrer o pour oui ou n pour non."); fflush(stdin); getch(); gotoxy(0,13); for(i=0;i<80;i++) { printf(" "); } gotoxy(46,12); for(i=0;i<60;i++) { printf(" "); } gotoxy(0,13); } } while(modif!='o' && modif!='n'); if(modif=='o') { do { g=1; printf("Entrez le nouveau nom du produit: "); fflush(stdin); gets(buf); if(strlen(buf)>29) { printf("Veuillez ne pas entrer un nom de plus de 29 caracteres.\n"); fflush(stdin); getch(); gotoxy(0,4); for(i=0;i<60;i++) { printf(" "); } gotoxy(34,3); for(i=0;i<60;i++) { printf(" "); } gotoxy(0,3); } } while(strlen(buf)>29); strcpy(produit->NomProduit,buf); } //Ajout UnitéMesure Produit do { printf("Entrez l'unite de mesure de %s: ",produit->NomProduit); fflush(stdin); gets(buf); if (strlen(buf)>9 || buf[0]=='\0') { if(strlen(buf)>9) printf("Veuillez ne pas entrer une unite de mesure de plus de 9 caracteres.\n"); else printf("Veuillez entrer l'unite."); fflush(stdin); getch(); gotoxy(0,5); for(i=0;i<80;i++) { printf(" "); } r=strlen(produit->NomProduit)+30; gotoxy(r,4); for(i=0;i<60;i++) { printf(" "); } gotoxy(0,4); } } while(strlen(buf)>9 || buf[0]=='\0'); strcpy(produit->UniteMesure,buf); //Ajout Prix do { printf("Entrez le prix de %s: ",produit->NomProduit); j=scanf("%f",&(produit->Prix)); if (j==0) { printf("Veuillez entrer un nombre"); fflush(stdin); getch(); gotoxy(0,6); for(i=0;i<80;i++) { printf(" "); } r=strlen(produit->NomProduit)+20; gotoxy(r,5); for(i=0;i<60;i++) { printf(" "); } gotoxy(0,5); } } while(j==0); //Choix Type do { fflush(stdin); printf("Quel est le type de %s:\n",produit->NomProduit); printf("\t1.FINI\n"); printf("\t2.SEMI-FINI\n"); printf("\t3.MATIERE PREMIERE\n"); printf("Faites votre choix: "); j=scanf("%d",&r); if (j==0 || r<1 || r>3) { if(j==0) printf("Veuillez entrer un nombre"); else printf("Veuillez faire un choix dans la liste."); fflush(stdin); getch(); gotoxy(0,11); for(i=0;i<80;i++) { printf(" "); } gotoxy(20,10); for(i=0;i<60;i++) { printf(" "); } gotoxy(0,6); } } while(j==0 || r<1 || r>3); switch(r) { case 1: { strcpy(produit->TypeProduit,"FINI"); } break; case 2: { strcpy(produit->TypeProduit,"SEMI-FINI"); } break; case 3: { strcpy(produit->TypeProduit,"MATIERE PREMIERE"); } break; } //Choix Catégorie do { fflush(stdin); printf("Entrez la categorie de %s (O/1): ",produit->NomProduit); j=scanf("%d",&produit->Categorie); if(j==0 || (produit->Categorie!=0 && produit->Categorie!=1)) { printf("Veuillez entrer 0 ou 1"); fflush(stdin); getch(); gotoxy(0,12); for(i=0;i<80;i++) { printf(" "); } r=strlen(produit->NomProduit)+31; gotoxy(r,11); for(i=0;i<60;i++) { printf(" "); } gotoxy(0,11); } } while(j==0 || (produit->Categorie!=0 && produit->Categorie!=1)); fproduit=fopen("Produit.dat","r+b"); fseek(fproduit,index->Posi*sizeof(struct produit),SEEK_SET); fwrite(produit,sizeof(struct produit),1,fproduit); fclose(fproduit); if(g==1) { supprElemIndex(index,*produit,nproduit-depl-1); index=index-depl; temp.NumProduit=produit->NumProduit; strcpy(temp.NomProduit,produit->NomProduit); indexation(temp,nproduit-1,index); } system("cls"); }
void supprElemIndex(struct ind *index,struct produit produit,int nproduit) { int j=0;
for(j=0;j<nproduit;j++) { (index+j)->NumProduit=(index+j+1)->NumProduit; strcpy((index+j)->NomProduit,(index+j+1)->NomProduit); (index+j)->Posi=(index+j+1)->Posi; } }
|
|
|