contatore non si ferma..

Pubblicità

martìn91

Utente Attivo
Messaggi
14
Reazioni
0
Punteggio
25
Ciao, sto scrivendo questo programmino in C che mi permetta di capire la materia piu difficile da un elenco in un file di testo, ma non capisco perchè nell'esecuzione del programma sembra che il mio contatore n vada fino al MAX definito, anche se dalle istruzioni date non credo debba farlo (e neanche non voglio che lo faccia...), stampandomi vari numeri random non voluti...
il file input.txt è scritto così(se può essere di aiuto):
<materia> <nome prof> <cognome prof> <periodo> <crediti> <%superamento esame> per ogni linea.
Sapete dirmi l'errore che commetto? Grazie!:help:


Codice:
#include <stdio.h>
#include <stdlib.h>
#define MAX 50
typedef struct
{
  char materia[20];
  char nome[20];
  char cognome[20];
  int periodo;
  int crediti;
  int percsup;
} Insegnamenti;

int maxcrediti(Insegnamenti raccolta[], int i, int n);
int main(int argc, char* argv[])
{
    FILE *f;
    Insegnamenti raccolta[MAX];
    char t[2][MAX],c[3][MAX],p[4][MAX]; //periodo ,crediti, percentuale ,per effettuare conversione
    int i, n=0;

    if(argc!=2)
    {
        fprintf(stderr, "Errore argomenti!\n");
        return -1;
    }
    if((f=fopen(argv[1],"r"))==NULL)
    {
        fprintf(stderr, "Errore apertura del file!\n");
        return -2;
    }

    while((fscanf(f,"%s%s%s%s%s%s", raccolta[n].materia, raccolta[n].nome, raccolta[n].cognome, t[n], c[n], p[n]))!=EOF)
          {
              n++;
          }

    //conversione numeri interi
    for(i=0;i<n;i++)
    {
        raccolta[i].periodo = atoi(t[i]);
        raccolta[i].crediti = atoi(c[i]);
        raccolta[i].percsup = atoi(p[i]);
    }
    //stampa

    for(i=0;i<n;i++)
    {
        printf("%s\t%s\t%20s\t%d\t%d\t%d\n",raccolta[i].materia,raccolta[i].nome, raccolta[i].cognome, raccolta[i].periodo, raccolta[i].crediti,raccolta[i].percsup);

    }

    i = maxcrediti(raccolta,i,n);
    printf("la materia più difficile è %s", raccolta[i].materia);


    return 0;
}

int maxcrediti(Insegnamenti raccolta[], int i, int n)
{
    int max;
    for(i=0;i<n;i++)
    {
        if(raccolta[i].percsup < raccolta[n].percsup)
        {
         max=i;
        }
        else
        {
            max=n;
        }
    }
    return max;
}
 
Ultima modifica:
Da quanto ho capito scrivi il file MAX volte e poi richiami la lettura MAX volte incrementando n MAX volte.
Se vuoi bloccare all' n-esimo valore il ciclo devi aggiungere una condizione nel while oppure usare un ciclo for (stessa cosa).
 
Risolto, dichiaravo
Codice:
char t[2][MAX],c[3][MAX],p[4][MAX];
che sarebbe dovuto essere
Codice:
char t[MAX][2],c[MAX][3],p[MAX][4];
Ora funziona alla grande! :-D Ciao!:D
 
Pubblicità
Pubblicità
Indietro
Top