ragazzi perchè non mi funziona questo programma e neanche mi scrive sul file
per favore e graziecodice:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <limits.h>//vedi i commenti successivi perchè ho aggiunto questo #define N 31//Perchè hai messo 31??? Se questo indica la lunghezza di max 30 dei campi nome, cognome e regione dovrebbe essere 29 in quanto da 0 a 29 ci sono 30 cifre. #define M 11 #define P 110 //doversti creare la struttura studenti e dentro quella della data typedef struct studente{ char nome[N]; char cognome[N]; char regione[N]; struct data{ int gg; int mm; int aaaa; }data; char area; }studente; int main(int argc,char*argv[]) { FILE*fp; char str[P];//non capisco a cosa serve char nome[N]; char cognome[N]; char regione[N]; struct studente stud; char area; int count1=0;//Quando devi usare una variabile per contare qualcosa va sempre messa a zero perchè è possibile che non ci siano elementi che soddisfano la condizione int count2=1;//Stessa cosa di sopra int i, j; int max=0; int min=INT_MAX;//Di solito va il massimo valore che il tipo della variabile può avere. Ti consiglio quindi di usare la libreria limits.h e di usare la costante INT_MAX int n=0; char regioni[20];//serve per vedere quali regioni ho già controllato per eseguire il punto 2. l'ho fatto di 20 perchè 20 sono le regioni italiane if(argc!=2){ printf("\n errore linea di comando"); return -1; } fp=fopen(argv[1],"r"); if(fp==NULL){ printf("\n errore apertura file"); return -2; } //////////////////// Scrivo dei nomi sul file per vedere se il programma funziona printf("scrivo"); studente studScrivi; studScrivi.area='I'; strcpy (studScrivi.cognome,"scardigno"); studScrivi.data.aaaa=2012; studScrivi.data.gg=30; studScrivi.data.mm=8; strcpy (studScrivi.nome,"antonio"); strcpy (studScrivi.regione,"puglia"); FILE *f; size_t len; if ((f = fopen (argv[1],"r")) != NULL) { fwrite (&studScrivi, sizeof (studente),1, f); if (len == sizeof (studente)) printf ("Scrittura OK\n"); fclose (f); } ////////////////////////////////////////////////////////////// while(fscanf(fp,"%s %s %s %i %i %i %c", &stud.nome, &stud.cognome, &stud.regione, &stud.data.gg, &stud.data.mm, &stud.data.aaaa, &stud.area)!=EOF){ printf("ok");//sscanf(,"%d/%d/%d",&data.gg,&data.mm,&data.yyyy); questa non serve perchè i dati dello studente li leggiamo precedentemente if(stud.data.mm>=9 || stud.data.mm<=4){//i mesi devono essere maggiore e uguale e minore e uguale altrimenti i mesi di settembre e aprile non sono compresi printf("\n immatricolazione non valida"); } //for(i=0,n=i+1;i<strlen(str);i++){ sei già all'inerno del while che esamina gli studenti uno ad uno non serve //if(strcmp(regione[i],regione[n])==0){ //ora conto gli studenti di una stessa regione e salvo la regione dello studente attuale nel vettore regioni così evito di stampare dati relativi alla stessa regione for (j=0; j<sizeof(regioni); j++) if (strcmp(stud.regione,regioni[j])==0) return -4; if(stud.area=='I'){ count1++; } if(stud.area=='A'){ count2++; } //if((count1+count2)>max){ // max=(count1+count2); //} //else{ // if((count1+count2)<min) // min=(count1+count2); //} printf("\n la regione %s ha un numero di iscritti ad ingegneria pari a %d e in architettura pari a %d",stud.regione,count1,count2); } // questa riga di codice va messa nel ciclo, quindi prima della graffa qua sopra printf("\n la regione %s ha un numero di iscritti ad ingegneria pari a %d e in architettura pari a %d",regione[n],count1,count2); //printf("\n la regione da cui provengono più studenti è %s con %d studenti",regione[n],max); //printf("\n la regione da cui provengono meno studenti è %s con %d studenti",regione[n],min); //} //count1=1; //for(i=0,n=i+1;i<strlen(str);i++){ // if(data[i].mm==data[n].mm){ // count1++; // } // printf("\n nel mese %d il numero totale di immatricolati è %d",data[i].mm,count1); //} fclose(fp); return 0; }![]()


Rispondi quotando
perà va in errore D: mi arriva al punto dove mi stampa "ok" poi va in errore D: jelp please D:
