Ciao a tutti, per prima cosa mi presento dicendo che è un pò che leggo questo forum che spesso e volentieri mi è stato di aiuto, quindi colgo l'occasione per ringraziarvi!
Detto ciò vengo al dunque...
Ho un dubbio per quanto riguarda la lettura dei dati da file.
L'esercizio che devo svolgere mi richiede di leggere dal file input.txt le coordinate (per ogni punto, prima ascissa, quindi ordinata) dei 3 vertici di un triangolo e successivamente calcolare e stampare sul file output.txt il perimetro del triangolo.
Parto copiando il programma che ho fatto e che pare funzioni:
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int main() {
int x1, x2, x3, y1, y2, y3;
float latoAB;
float latoBC;
float latoCA;
float perimetroTriangolo;
ifstream flussodafile ("input.txt");
cout << "leggi le coordinate dei tre vertici" << endl;
flussodafile >> x1;
flussodafile >> x2;
flussodafile >> x3;
flussodafile >> y1;
flussodafile >> y2;
flussodafile >> y3;
cout << x1 << endl;
cout << x2 << endl;
cout << x3 << endl;
cout << y1 << endl;
cout << y2 << endl;
cout << y3 << endl;
flussodafile.close();
latoAB = sqrt ( (float) ( ( x2 - x1 ) * ( x2 - x1 ) ) + ( ( y2 - y1 ) * ( y2 - y1 ) ) );
cout << "il lato AB misura:" << " " << latoAB << endl;
latoBC = sqrt ( (float) ( ( x3 - x2 ) * ( x3 - x2 ) ) + ( ( y3 - y2 ) * ( y3 - y2 ) ) );
cout << "il lato BC misura:" << " " << latoBC << endl;
latoCA = sqrt ( (float) ( ( x1 - x3 ) * ( x1 - x3 ) ) + ( ( y1 - y3 ) * ( y1 - y3 ) ) );
cout << "il lato CA misura:" << " " << latoCA << endl;
perimetroTriangolo = latoAB + latoBC + latoCA ;
cout << "il perimetro del triangolo ABC misura:" << " " << perimetroTriangolo << endl;
ofstream flussosufile ("output.txt");
flussosufile << perimetroTriangolo;
flussosufile.close();
system("pause");
}
flussodafile >> x1;
flussodafile >> x2;
flussodafile >> x3;
flussodafile >> y1;
flussodafile >> y2;
flussodafile >> y3;
cout << x1 << endl;
cout << x2 << endl;
cout << x3 << endl;
cout << y1 << endl;
cout << y2 << endl;
cout << y3 << endl;
non mi convince la parte evidenziata...
Mi spiego meglio: io sapevo di aver bisogno di 6 coordinate (3 ascisse e 3 ordinate) e quindi di dover leggere 6 numeri dal file, per fare questo ho "richiamato" manualmente, una ad una le coordinate scrivendo flussodafile >> x1; flussodafile >> x2; ... flussodafile >> y3.
Questo procedimento, ammesso che sia corretto (a funzionare funziona, ma non vorrei fosse un caso) diventerebbe estremamente lungo nel caso io volessi o dovessi leggere da file 100 o più numeri o caratteri.
La mia domanda è: esiste un metodo per dire al programma di leggere i primi 6 numeri (in questo caso) o le prime 345 lettere o i primi 33 caratteri che incontra, senza doverli richiamare come ho fatto io?
Se si, mi potreste spiegare come? (magari con un esempio pratico )
Possono essermi utili gli array?
Grazie mille dell'attenzione, spero di aver indovinato la sezione giusta, in caso contrario chiedo venia!