Oppure

Loading
27/05/10 12:06
domi90
qualcuno saprebbe dirmi il problema di questa funzione??
int cancella(int ){
int z;
int n;
int pos;
fp=fopen("studenti","w+";);
char cog[30];
char nm[30];
int an;
printf("Inserisci cognome:";);
scanf("%s",cog);
printf("Inserisci nome:";);
scanf("%s",nm);
printf("Inserisci anno:";);
scanf("%d",&an);
for(;;){
n=fread(&stud,sizeof(struct studente),1,fp);
if(n==0)
pos=-1;
else
if(strcmp(cog,stud.cognome)==0)
if(strcmp(nm,stud.nome)==0)
if(an==stud.dat.anno){
pos=ftell(fp);}}
if(pos!=-1){
strcpy(stud.cognome,"";);
strcpy(stud.nome,"";);
strcpy(stud.ind,"";);
stud.dat.giorno=0;
stud.dat.mese=0;
stud.dat.giorno=0;
fseek(fp,pos,0);
fwrite(&stud,sizeof(struct studente),1,fp);
fclose(fp);
z=0;
return (z);}
else
z=1;
fclose(fp);
return (z); }
aaa
27/05/10 17:39
Poggi Marco
Postato originariamente da domi90:

qualcuno saprebbe dirmi il problema di questa funzione??
int cancella(int )  // Che argomenti riceve?
{
    int z;
     int n; 
     int pos;
     fp=fopen("studenti","w+");
     char cog[30];
     char nm[30];
     int an;
      printf("Inserisci cognome:");
    scanf("%s",cog);
    printf("Inserisci nome:");
    scanf("%s",nm);  // dovresti scrivere  scanf("%s", &nm);   
     printf("Inserisci anno:");
    scanf("%d",&an);
    for(;;){
     n=fread(&stud,sizeof(struct studente),1,fp);
     if(n==0)
     pos=-1;
     else
     if(strcmp(cog,stud.cognome)==0)
      if(strcmp(nm,stud.nome)==0)
      if(an==stud.dat.anno){
      pos=ftell(fp);}}
    if(pos!=-1){
    strcpy(stud.cognome,"");
    strcpy(stud.nome,"");
    strcpy(stud.ind,"");
    stud.dat.giorno=0;
    stud.dat.mese=0;
    stud.dat.giorno=0;
    fseek(fp,pos,0);  // ???
    fwrite(&stud,sizeof(struct studente),1,fp);
    fclose(fp);
    z=0;
    return (z);}
    else 
         z=1;
         fclose(fp);
         return (z); } 



Ho letto il tuo programma, e ho alcuni dubbi -vedi commenti-.

Esettamente cosa deve fare la funzione? Com' è fatta la struct studente?
Ultima modifica effettuata da Poggi Marco 27/05/10 17:40
aaa
28/05/10 6:41
domi90
questo è l'intero programma....lavora su un file in modo da creare una procedura anagrafrafica

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
int inserisci (int);
int ricerca (int);
int cancella (int);
struct voce_menu{char*msg;
int(*funz)(int);};
struct voce_menu menu[]={" ARCHIVIO STUDENTI\n\n1.Inserisci studente\n",inserisci,
"2.Ricerca studente\n",ricerca,
"3.Cancella studente\n",cancella,
"0.Fine\n",NULL,NULL,NULL};
struct data{int giorno;
int mese;
int anno;};
struct studente{
char cognome[30];
char nome[30];
char ind[30];
struct data dat;};
struct studente stud;
FILE*fp;
main(){
int ritorno;
int posizione;
int scelta;
int loop=0;
struct voce_menu *c;
while(loop==0){
for(c=menu;c->msg!=NULL;c++)
printf("%s",c->msg);
printf("\n scegliere opzione:";);
scanf("%d",&scelta);
if(scelta==0)loop=1;
else
switch(scelta){
case 1:
(*menu[scelta-1].funz)(10);
break;
case 2:
posizione=(*menu[scelta-1].funz)(50);
if(posizione==-1)
printf("persona non presente";);
else
printf("persona presente in pos %d",&posizione);
break;
case 3:
ritorno=(*menu[scelta-1].funz)(10);
if(ritorno==0)
printf("Persona eliminata";);
else
printf("Persona non eliminata";);
break;}
system("PAUSE";); }}

int inserisci(int niente){
fp=fopen("studenti","a+";);
printf("Inserisci cognome:";);
scanf("%s",stud.cognome);
printf("Inserisci nome:";);
scanf("%s",stud.nome);
printf("Inserisci indirizzo:";);
scanf("%s",stud.ind);
printf("Inserisci giorno di nascita:";);
scanf("%d",&stud.dat.giorno);
printf("Inserisci mese di nascita:";);
scanf("%d",&stud.dat.mese);
printf("Inserisci anno di nascita:";);
scanf("%d",&stud.dat.anno);
fwrite(&stud,sizeof(struct studente),1,fp);
fclose(fp);
return 100;}

int ricerca (int riniente){
int n;
int pos;
fp=fopen("studenti","r";);
char cogn[30];
char nm[30];
int an;
printf("Inserisci cognome:";);
scanf("%s",cogn);
printf("Inserisci nome:";);
scanf("%s",nm);
printf("Inserisci anno:";);
scanf("%d",&an);
for(;;){
n=fread(&stud,sizeof(struct studente),1,fp);
if(n==0){
fclose(fp);
pos=-1;
return (pos);}
else
if(strcmp(cogn,stud.cognome)==0)
if(strcmp(nm,stud.nome)==0)
if(an==stud.dat.anno){
pos=ftell(fp);
fclose(fp);
return (pos-sizeof(struct studente));}}}

int cancella(int nothing){
int z;
int n;
int pos;
fp=fopen("studenti","w+";);
char cog[30];
char nm[30];
int an;
printf("Inserisci cognome:";);
scanf("%s",cog);
printf("Inserisci nome:";);
scanf("%s",nm);
printf("Inserisci anno:";);
scanf("%d",&an);
for(;;){
n=fread(&stud,sizeof(struct studente),1,fp);
if(n==0)
pos=-1;
else
if(strcmp(cog,stud.cognome)==0)
if(strcmp(nm,stud.nome)==0)
if(an==stud.dat.anno){
pos=ftell(fp);}}
if(pos!=-1){
strcpy(stud.cognome,"";);
strcpy(stud.nome,"";);
strcpy(stud.ind,"";);
stud.dat.giorno=0;
stud.dat.mese=0;
stud.dat.giorno=0;
fseek(fp,pos,0);
fwrite(&stud,sizeof(struct studente),1,fp);
fclose(fp);
z=0;
return (z);}
else
z=1;
fclose(fp);
return (z); }
il programma funziona sl che la funzione 3 non mi ritorna la printf che uso nel main...
Ultima modifica effettuata da domi90 28/05/10 8:01
aaa