ragazzi perchè non mi funziona questo programma e neanche mi scrive sul file
codice:
#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;
}
per favore e grazie