Esercizio su file

di Anonimizzato20789 il
18 risposte
Salve ragazzi,
Ho un grave problema, non riesco a capire delle cose sui file ed ho bisogno che qualcuno me le spieghi, sto davvero impazzendo..

Si desidera sviluppare un programma in linguaggio C per gestire in modo informatico un
registro di esame.
Il registro è memorizzato in un ?le di testo con nome registro.txt e contiene i dati
di N studenti, ove N è il numero intero scritto nella prima riga del ?le. Dopo questa prima
riga, ogni riga successiva contiene il dato relativo ad un singolo studente, indicando il numero di matricola dello studente (numero intero compreso 1 e 999999) ed il voto conseguito
(numero intero con valore tra 18 e 30, oppure zero per indicare che l’esame non è ancora
stato sostenuto).
il programma deve fornire le seguenti statistiche: numero di studenti promossi e relativa percentuale sul totale e voto medio degli studenti promossi
ESEMPIO

3

33467 30
24356 0
224678 18

OUTPUT:
promossi = 2 (66.7 %)
voto medio = 24.0




Dopo aver aperto il file per me diventa davvero complicato operare con i dati del file. Qualcuno può aiutarmi spiegandomi come fare?

18 Risposte

  • Devi leggere i dati dal file. Non è complicato, basta usare le funzioni di lettura da file. Le conosci?
  • Se ti riferisci ad fscanf si la conosco però ho molti dubbi a riguardo...
  • Se non dici quali sono i dubbi e non mostri l'uso che fai della fscanf nel tuo codice, che ti si può dire?

    La prima cosa che ti chiede di fare è leggere il numero che indica quante righe di dati ci sono. Hai letto questo numero?
  • Per leggere il primo rigo contente il numero di candidati dovrei scrivere:
    
    fscanf(fp, "%d", &candidati);
    
    Dove fp è il puntatore a file e candidati la variabile dove salvo il dato
  • Ok, mi sembra corretto ... quindi? Che dubbi?
  • Mi interesserebbe ora acquisire il numero matricola e il voto per salvarli nelle rispettive variabili, ma non so come devo iniziare ad acquisirli escludendo la prima riga del file di cui ho preso gia il valore con la precedente fscanf..
  • Hai già letto la prima riga con la prima scanf, le altre scanf leggeranno le righe seguenti. Ovviamente tu sai quante sono le righe che seguono...
  • Ok perfetto, ma se volessi leggerle tutte utilizzando un ciclo while, come condizione cosa dovrei mettere?
    Perche se faccio while (fp!feof) mi rilegge la prima riga
  • Intanto si scrive

    while(!feof(fp))

    ma non hai bisogno di questo modo di leggere dato che sai esattamente QUANTE sono le righe da leggere. Ti basta un ciclo for.
  • Si scusami per la sintassi del while
    Comunque non posso usare cicli for, ci è stato vietato
  • Ok, utilizza la while ... sicuramente non leggerai dall'inizio del file perché hai già letto la prima riga con la prima fscanf.

    Prova !
  • Grazie mille, provo e ti faccio sapere
  • Ho provato e funziona ma c'è un problema con un solo %d mi acquisisce entrambi i valori in una variabile ma a me interessa che mi acquisisca entrambi i valori in due variabili differenti che sono una matricola e una voto
  • E questo è un problema?

    Andiamo ... O usi due fscanf con due variabili o una fscanf con due %d e due variabili. Come per la scanf che dovresti aver studiato.

    Non ti fermare alla prima difficoltà. E mostra il codice che hai scritto.

    P.S. Se studi informatica e ti fermi su queste sciocchezze, come farai quando arriveranno le vere cose serie e difficili?
Devi accedere o registrarti per scrivere nel forum
18 risposte