PDA

View Full Version : [C++]Lettura da file


MaxGuevara
19-01-2006, 21:50
Ciao.
Ho un problema a leggere delle righe di testo da un file.
In pratica il programma C++ che ho in mente dovrebbe chiedere all'utente di digitare il numero di una matricola,cercare all'interno del file questo numero e se lo trova stamparmi a video il nome del proprietario.
Vi posto la parte del codice che fa questo:


cout<<"Inserisci il numero di matricola:"<<endl;
cin>>matr;
if(!leggi)
{
cerr<<"Impossibile aprire il file!";
return 1;
}
for(unsigned int n=0;n<1024;++n)
{
leggi>>lettura[n].nome>>lettura[n].cognome>>lettura[n].anno>>lettura[n].nascita>>lettura[n].recapito>>lettura[n].matricola>>lettura[n].email;
}
posizione_matricola=cerca_numero_matricola(lettura,matr);
if(posizione_matricola<0)
{
cout<<"\nNumero di matricola non presente";
return 0;
}
else
{
cout<<"\nIl numero di matricola "<<matr<<" appartiene a "<<lettura[posizione_matricola].nome<<" "<<lettura[posizione_matricola].cognome;
}
leggi.close();


La funzione chiamata nello snippet sovrastante e' la seguente:

int cerca_numero_matricola(info a[],unsigned int b)
{
int indice;
int i=0;
for(i=0;i<1024;i++)
{
if(a[i].matricola=b)
indice=i;
return indice;
}
}


Il mio problema e' che il programma riesce ad effettuare la ricerca e a stamparmi a video con successo solo i dati della prima riga,mentre la seconda non riesce a leggerla.
ESEMPIO:
Il programma legge da un file chiamato "Archivio.txt"
Il contenuto di Archivio.txt e':

Francesco Rossi 12345
Luca Verdi 67890

dove 12345 e 67890 sono i numeri di matricola.
Se io,una volta eseguito il programma,alla richiesta "Scrivi il numero di matricola"
scrivo 12345
mi appare:
Il numero di matricola 12345 appartiene a Francesco Rossi

E quindi e' tutto corretto,mentre se scrivo:

67890
mi risponde con:
Numero di matricola non esistente.

Spero di essere stato abbastanza chiaro.
Grazie in anticipo.

Qu@ker
19-01-2006, 22:00
La funzione chiamata nello snippet sovrastante e' la seguente:

int cerca_numero_matricola(info a[],unsigned int b)
{
int indice;
int i=0;
for (i=0;i<1024;i++)
{
if(a[i].matricola=b)
indice=i;
return indice;
}
}


Non mi pare corretta.

int cerca_numero_matricola(info a[], unsigned int b)
{
for(int i = 0; i < 1024; ++i) {
if (a[i].matricola == b)
return i;
}
return -1;
}

MaxGuevara
20-01-2006, 00:02
Ok,ho corretto ma continuo ad avere lo stesso problema...

Fenomeno85
20-01-2006, 13:37
non vedo come leggi il file ... quando ripassi e non hai chiuso il file serve fare il rewind del puntatore ... quindi

in c


rewind (fp);


in c++


file.seekg (0, ios::end);


~§~ Sempre E Solo Lei ~§~

MaxGuevara
20-01-2006, 14:02
non vedo come leggi il file ... quando ripassi e non hai chiuso il file serve fare il rewind del puntatore ... quindi

in c


rewind (fp);


in c++


file.seekg (0, ios::end);


~§~ Sempre E Solo Lei ~§~


Per leggere il file avevo scritto:

ifstream leggi("Archivio.txt");

Cosa intendi per "ripassi"?

Fenomeno85
20-01-2006, 14:18
non so che cosa hai combinato

http://www.cplusplus.com/ref/iostream/ifstream/

~§~ Sempre E Solo Lei ~§~