Salve, non riesco davvero a capacitarmi.
Premetto che non sono un esperto, e sono soltanto un ragazzo che inizia ad imparare.
Comunque vorrei riuscire a passare lo stream aperto di un file ad una funzione.
Nel senso che ho una funzione che deve operare su un file già aperto, e che non vorrei chiudere e riaprire inutilmente. Quindi ho lo stream del file aperto, ed una funzione nel corpo del while che riguarda il dato file.
Vabbè ecco un esempio:
using namespace std;
FILE *pf;
FILE *pd;
void add_new_student(FILE, FILE);
int main ()
{
int matricola_studente;
char nome_studente[20];
char cognome_studente[20];
int opzione=0;
cout<<"...\n";
cout<<"...\n\n";
int o=getch();
if(o==13)//se clicca invio
{
pf = fopen("Studenti.txt", "r");
if(pf==NULL){
cout<<"Impossibile aprire il file\n";
system("pause");
exit(1);
}
pd = fopen("Esami.txt", "r+");
if(pd==NULL){
cout<<"Impossibile aprire il file\n";
system("pause");
exit(1);
}
cout<<"Lettura Studenti.txt"<<endl<<endl;
while(!feof(pf)){ //studenti.txt
fscanf(pf,"%d ",&matricola_studente);
cout<<matricola_studente<<" | ";
fscanf(pf,"%s ",nome_studente);
cout<<nome_studente<<" ";
fscanf(pf,"%s ",cognome_studente);
cout<<cognome_studente<<endl;
cout<<"\nMENU OPZIONI\n\n";
cout<<"1 - Inserire nuovi studenti\n";
cout<<"2 - Inserire i risultati di nuovi esami effettuati dagli studenti presenti nell'elenco\n";
cout<<"3 - Stampare tutti gli esami eseguiti da uno studente e la relativa media\n";
cout<<"4 - Stampare tutti gli studenti che hanno eseguito un certo esame\n";
cout<<"0 - Esci!\n";
cin>>opzione;
switch(opzione){
case 0:
return 0;
break;
case 1:
add_new_student(pf, pd);
break;
case 2:
add_new_exam();
break;
case 3:
show_exam();
break;
case 4:
show_an_exam();
break;
default:
cout<<"\nOpzione non disponibile\n";
break;
}
//Chiusura WHILE studenti.txt
fclose(pf);
//Chiusura WHILE esami.txt
fclose(pd);
}
...
cout<<endl;
system("pause");
return EXIT_SUCCESS;
}
void add_new_student(FILE *pf,FILE *pd){
...
}
Grazie per il tempo dedicatomi