Sto svolgendo degli esercizi d'esame, visto che tra poco mi tocca, ma penso proprio che per quanto riguarda l'utilizzo degli stream per leggere/scrivere su file , l'insegnante abbia toppato alla grande .
Questo e' il testo dell'esercizio :
Esercizio 5
Il file Petrolio.txt contiene le misure della quantità di petrolio contenuto in tre diverse cisterne di una
raffineria. Le misure sono operate una volta al giorno durante un periodo di osservazione. Il file contiene,
per ciascuna riga, il codice della cisterna cui la misura si riferisce e la quantità di petrolio in essa contenuto,
espressa in litri. Il codice della cisterna è rappresentato con un numero intero: 1 per la prima cisterna, 2 per
la seconda e 3 per la terza. La quantità di petrolio è un numero reale. Il numero di righe che compongono il
file non è noto al programmatore. Si scriva un programma C++ che legga il file Petrolio.txt, calcoli e
stampi a video la quantità media di petrolio contenuto in ciascuna cisterna nel periodo di osservazione.
Esempio:
Se il contenuto del file Pressione.txt è il seguente:
1 1200.00
2 1100.00
2 2150.00
3 1530.00
1 1280.00
La quantità di petrolio media nella cisterna 1 è di 1240.00 litri, quella della cisterna 2 è di 1625,00 litri e
quella della cisterna 3 di 1530,00 litri.
E questa e' la soluzione :
Quote:
int main(){
fstream fin;
fin.open("Petrolio.txt", ios::in);
int cisterna; double volume;
double somma_1 = 0.0, somma_2 = 0.0, somma_3 = 0.0;
int contatore_1 = 0, contatore_2 = 0, contatore_3 = 0;
fin >> cisterna >> volume;
while (!fin.eof()) {
switch (cisterna) {
case 1:
somma_1 += volume;
contatore_1++;
break;
case 2:
somma_2 += volume;
contatore_2++;
break;
case 3:
somma_3 += volume;
contatore_3++;
break;
}
fin >> cisterna >> volume;
}
fin.close();
if (contatore_1 != 0)
cout << "La quantita' media di petrolio nella cisterna 1 e' di" << somma_1 / contatore_1 << " litri" << endl;
if (contatore_2 != 0)
cout << "La quantita' media di petrolio nella cisterna 2 e' di" << somma_2 / contatore_2 << " litri" << endl;
if (contatore_3 != 0)
cout << "La quantita' media di petrolio nella cisterna 3 e' di" << somma_3 / contatore_3 << " litri" << endl;
return 0;
}
|
Non funziona, l'ho gia' debuggato e precisamente quando deve leggere da file e scrivere nelle variabili cisterna e volume non fa niente. Quindi deve essere per forza sbagliata la semantica. Qualcuno che mi spieghi come si utilizzano veramente i file ?