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