salve a tutti, scusate ma mi trovo costretto a farvi un copia e incolla di tutto il codice perchè non riesco a capire cosa c'è di sbagliato..

praticamente dovevo fare un programma che prendesse dei dati dei professori e dei relativi esami compresi crediti, periodo(semestre), e percentuale promossi.

Il programma dovrà stampare a video:
a. il nome della materia che assegna più crediti in assoluto (scriverle tutte se sono più di una con crediti max)
b. per ciascun periodo didattico (considerandone al massimo 4), la
materia più difficile da superare

Il programma dovrà infine richiedere l’inserimento da tastiera di nome e
cognome di un professore e stampare a video:
c. la somma dei crediti assegnati dalle materie che insegna
d. la media di superamento degli esami da lui tenuti.

il punto A l'ho fatto subito e funzionava perfettamente! però ora ho fatto il punto c e d.. e il punto A non funziona più mi stampa 2faccine sorridenti al posto della materia e i crediti massimi sono uguali a 0!

poi se metto tutta la parte dei punti C e D come se fosse un commento, il punto A funziona di nuovo perfettamente -.- però non riesco a capire dov'è sbagliato..

codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


typedef struct nomi {
           char materia[20];
           char nome_prof[20], cognome_prof[20];
           int periodo, crediti, promossi;
                    } Struttura;

int main(int argc, char *argv[])
{
    FILE *fp;
    Struttura dati;
    char nomefile[20], materiamax[80][20], materiadiff[4][20], matmax[20], nome[20], cognome[20];
    int continuascrivere, righe=0, i, p;
    int creditimax[80], promossimin[4], periodimax=4, max, pos, totcrediti=0, totpromossi=0, numtot=0;
    float media=0;

    for(p=0; p<80; p++) {
                creditimax[p]=-1;
                        }

    if(argc!=2) {
           printf("\n\nERRORE parametri");
           return 20;
                }
    strcpy(nomefile, argv[1]);


    /*scrittura file*/

    fp=fopen(nomefile, "w");
    if(fp==NULL) {
            printf("\n\nERRORE all'interno del file");
            return 39;
                 }
    do {
        printf("\ninserisci materia:");
        scanf("%s", dati.materia);
        printf("\ninserisci nome prof:");
        scanf("%s", dati.nome_prof);
        printf("\ninserisci cognome prof:");
        scanf("%s", dati.cognome_prof);
        printf("\ninserisci semestre esame:");
        scanf("%d", &dati.periodo);
        while((dati.periodo<1)||(dati.periodo>4)) {
                printf("\nERRORE digitazione. periodo non corretto");
                printf("\ninserisci semestre esame:");
                scanf("%d", &dati.periodo);
                        }
        printf("\ninserisci crediti:");
        scanf("%d", &dati.crediti);
        printf("\ninserisci percentuale superamento esame:");
        scanf("%d", &dati.promossi);

        fprintf(fp, "%s - %s - %s - %d - %d - %d\n", dati.materia, dati.nome_prof, dati.cognome_prof, dati.periodo, dati.crediti, dati.promossi);
        righe++;
        printf("\n\nVuoi immettere altro esame?");
        printf("\nse SI premi 1!    -   se NO premi 0!");
        scanf("%d", &continuascrivere);
        while((continuascrivere!=0)&&(continuascrivere!=1)) {
                   printf("\n\nERRORE digitazione.");
                   printf("\n\nVuoi immettere altro esame?");
                   printf("\nse SI premi 1!    -   se NO premi 0!");
                   scanf("%d", &continuascrivere);

                        }


       }
    while(continuascrivere!=0);

    fclose(fp);
    printf("\nscrittura file completata\n");

    /*utilizzo file*/

    fp=fopen(nomefile, "r");
    if(fp==NULL) {
             printf("\n\nERRORE apertura file");
             return 70;
                 }
    p=0;
    while(fscanf(fp, "%s - %s - %s - %d - %d - %d\n", dati.materia, dati.nome_prof, dati.cognome_prof, &dati.periodo, &dati.crediti, &dati.promossi)!=EOF) {

                 creditimax[p]=dati.crediti;
                 strcpy(materiamax[p], dati.materia);
                 p++;
                }
    max=0;
    for(p=1; p<80; p++) {
                if(creditimax[p]>creditimax[p-1]) {
                            max=creditimax[p];
                            strcpy(matmax, materiamax[p]);
                            pos=p;
                                                  }
                        }
    printf("la materia con piu' crediti e' %s ---> %d\n", matmax, max);
    for(p=0; p<80; p++) {
               if(p!=pos) {
                    if(creditimax[p]==max) {
                                   printf("la materia con piu' crediti e' %s ---> %d\n", materiamax[p], creditimax[p]);
                                           }
                            }
                        }
    fclose(fp);


    for(i=0; i<4; i++) {
                promossimin[i]=101;
                       }
    for(i=0; i<periodimax; i++) {
        fp=fopen(nomefile, "r");
             if(fp==NULL) {
             printf("\n\nERRORE apertura file");
             return 97;
                          }

            while(fscanf(fp, "%s - %s - %s - %d - %d - %d\n", dati.materia, dati.nome_prof, dati.cognome_prof, &dati.periodo, &dati.crediti, &dati.promossi)!=EOF) {

                    if((dati.periodo==i+1)&&(dati.promossi<promossimin[i])) {
                            promossimin[i]=dati.promossi;
                            strcpy(materiadiff[i], dati.materia);

                                        }
                        }
               fclose(fp);

                                }

    for(i=0; i<periodimax; i++) {
                    if(promossimin[i]!=101) {
                            printf("\nmateria piu' difficile periodo %d: %s con %d percentuale promossi",
                                    i+1, materiadiff[i], promossimin[i]);

                                            }
                                }
    /*
    printf("\n\nImmettere nome professore desiderato:");
    scanf("%s", nome);
    printf("\nimmettere cognome professore:");
    scanf("%s", cognome);

    fp=fopen(nomefile, "r");
    if(fp==NULL) {
             printf("\n\nErrore file");
             return 148;
                 }
    while(fscanf(fp, "%s - %s - %s - %d - %d - %d\n", dati.materia, dati.nome_prof, dati.cognome_prof, &dati.periodo, &dati.crediti, &dati.promossi)!=EOF) {

              if(strcmp(dati.nome_prof, nome)==0) {
                                 if(strcmp(dati.cognome_prof, cognome)==0) {
                                                           totcrediti=totcrediti+dati.crediti;
                                                           totpromossi=totpromossi+dati.promossi;
                                                           numtot++;
                                                                           }
                                                  }

                    }
    fclose(fp);
    media=(float)totpromossi/numtot;
    printf("\n\n        PROFESSORE RICHIESTO:  %s %s", nome, cognome);
    printf("\n\nTotale crediti delle sue materie: %d", totcrediti);
    printf("\n\nMedia superamento esami: %f percento\n\n", media);

        */
    return 0;
}