Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - funzione con file
Forum - C/C++ - funzione con file

Avatar
domi90 (Normal User)
Rookie


Messaggi: 22
Iscritto: 07/05/2010

Segnala al moderatore
Postato alle 14:06
Giovedì, 27/05/2010
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); }

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 19:39
Giovedì, 27/05/2010
Testo quotato

Postato originariamente da domi90:

qualcuno saprebbe dirmi il problema di questa funzione??
Codice sorgente - presumibilmente C++

  1. int cancella(int )  // Che argomenti riceve?
  2. {
  3.     int z;
  4.      int n;
  5.      int pos;
  6.      fp=fopen("studenti","w+");
  7.      char cog[30];
  8.      char nm[30];
  9.      int an;
  10.       printf("Inserisci cognome:");
  11.     scanf("%s",cog);
  12.     printf("Inserisci nome:");
  13.     scanf("%s",nm);  // dovresti scrivere  scanf("%s", &nm);  
  14.      printf("Inserisci anno:");
  15.     scanf("%d",&an);
  16.     for(;;){
  17.      n=fread(&stud,sizeof(struct studente),1,fp);
  18.      if(n==0)
  19.      pos=-1;
  20.      else
  21.      if(strcmp(cog,stud.cognome)==0)
  22.       if(strcmp(nm,stud.nome)==0)
  23.       if(an==stud.dat.anno){
  24.       pos=ftell(fp);}}
  25.     if(pos!=-1){
  26.     strcpy(stud.cognome,"");
  27.     strcpy(stud.nome,"");
  28.     strcpy(stud.ind,"");
  29.     stud.dat.giorno=0;
  30.     stud.dat.mese=0;
  31.     stud.dat.giorno=0;
  32.     fseek(fp,pos,0);  // ???
  33.     fwrite(&stud,sizeof(struct studente),1,fp);
  34.     fclose(fp);
  35.     z=0;
  36.     return (z);}
  37.     else
  38.          z=1;
  39.          fclose(fp);
  40.          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 il 27/05/2010 alle 19:40
PM Quote
Avatar
domi90 (Normal User)
Rookie


Messaggi: 22
Iscritto: 07/05/2010

Segnala al moderatore
Postato alle 8:41
Venerdì, 28/05/2010
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 il 28/05/2010 alle 10:01
PM Quote