PDA

Visualizza la versione completa : [C] somma minuti per giorno


jonnyforever
27-01-2012, 15:34
perchè in questo codice non mi stampa il riepilogo dei minuti per ogni giorno'?? grazie mille a tutti
giorno attività minuti
1 lezione 90
4 ricevimento 60
3 progetto_a 180
3 lezione 180
3 correzione_esami 160
1 lezione 90



for(t=1; t<9; t++)
{
conta=0;
while(fgets(str,MAX,fp)!=NULL)
{
sscanf(str,"%d %s %d",&giorno,attivita,&min);

if(giorno==t)
conta+=min;
}
printf(" giorno %d somma %d\n",t,conta);


}
fclose(fp);
return 0;

}

oregon
27-01-2012, 15:43
Ma perché la while dentro il for?

jonnyforever
27-01-2012, 15:45
perchè per ogni giorno legge le righe e se trova quel giorno somma min. capito??

oregon
27-01-2012, 16:11
Io ho capito che per 9 volte rilegge tutto il file, ma dopo la prima volta il file è già stato letto e non può essere nuovamente letto se non sposti il puntatore all'inizio ...

E' sbagliato il criterio con cui opera il programma ... tu devi ottenere tante somme (una per ogni t) o una sola somma?

jonnyforever
27-01-2012, 16:23
tante somme per ogni giorno.. es giorno 1 somma 180 \n giorno 3 somma x...\n giorno 4 somma y...\n oppure così

while(fgets(str,MAX,fp)!=NULL)
{
sscanf(str,"%d %s %d",&giorno,attivita,&min);
vett[giorno-1]+=min;

printf(" giorno %d somma %d\n",giorno,vett);

}



memorizzando le somme in un vett

MI SONO CORRETTO CON LA VARIABILE. SCUSA :)

oregon
27-01-2012, 16:27
Così leggi il file una sola volta, senza il for ...

Ma d cosa è ? Non usi la variabile giorno ?

E ovviamente il vettore dovrà essere dimensionato con un numero di elementi adeguato al massimo giorno che puoi leggere dal file e dovrà essere azzerato.

jonnyforever
27-01-2012, 16:35
vett[giorno]=0;
while(fgets(str,MAX,fp)!=NULL)
{
sscanf(str,"%d %s %d",&giorno,attivita,&min);
vett[giorno-1]+=min;



}
for(t=0;t<5;t++)
printf(" giorno %d somma %d\n",t,vett);

fclose(fp);
return 0;

}



perchè nemmeno cosi mi riesce ?dove sbaglio?

oregon
27-01-2012, 16:40
dove sbaglio

Questo

vett[giorno]=0;

non azzera tutto il vettore ...

E in questa

printf(" giorno %d somma %d\n",t,vett);

devi indicare l'indice del vettore per visualizzare il suo contenuto ... non va bene vett ...

jonnyforever
27-01-2012, 16:43
Questo

vett[giorno]=0;

non azzera tutto il vettore ...

E in questa

printf(" giorno %d somma %d\n",t,vett);

allora va bene vett[giorno-1] e per l indice non parte da zero con t?? riesci a modificarmi correttamente il codice? sto letteralmente impazzendo!

oregon
27-01-2012, 16:46
Originariamente inviato da jonnyforever
riesci a modificarmi correttamente il codice? sto letteralmente impazzendo!

Devi azzerare il vettore nella dichiarazione ... quanti giorni sono quelli massimi previsti ?

Se sono 31, si scrive



int vett[31] = {0};

Loading