pocho183
24-03-2013, 20:22
Ho un problema in questa funzione; praticamente legge nome,cognome,numero in un file. Il problema è che legge solo la prima riga, gli altri non li trova. esempio
Mario Rossi 1
Luca Verdi 2
ecc.
cerco i rispettivi nominativi, per rossi tutto ok per verdi anche se è nello stesso file non trova nulla.
potreste aiutarmi proponendo una soluzione?
Record cercaRecord(Record record){
Record recordTemp;
/* Resetto i valori della struct recordTemp */
memset(recordTemp.nome, 0, sizeof(recordTemp.nome));
memset(recordTemp.cognome, 0, sizeof(recordTemp.cognome));
memset(recordTemp.numeroTelefono, 0, sizeof(recordTemp.numeroTelefono));
int cont=0;
/* Apertura dell'archivio "ElencoTelefonico.txt" */
if(( ElencoTelefonico = fopen("ElencoTelefonico.txt", "r")) == NULL){
printf("Non è possibile aprire l'elenco telefonico, verificare la consistenza dell'archivio");
chiusuraServer();
}
else{
/* Lettura del file e conteggio del numero di record presenti */
while(fscanf(ElencoTelefonico, "%s %s %s", recordTemp.nome, recordTemp.cognome, recordTemp.numeroTelefono) == -1){
printf("\nErrore fscanf\n");
chiusuraServer();
}
if(!feof(ElencoTelefonico)){
++cont;
}
/* Riposizionamento dell'indice di lettura del file */
rewind(ElencoTelefonico);
/* Rilettura del file alla ricerca del record richiesto */
for(int i=0; i<cont; ++i){
while(fscanf(ElencoTelefonico, "%s %s %s", recordTemp.nome, recordTemp.cognome, recordTemp.numeroTelefono) == -1){
printf("\nErrore fscanf\n");
chiusuraServer();
}
if((strcmp(record.nome, recordTemp.nome) == 0 && strcmp(record.cognome, recordTemp.cognome) == 0)){
while(fclose(ElencoTelefonico) != 0){
printf("\nErrore fclose\n");
chiusuraServer();
}
return recordTemp;
}
}
/* Chiusura del file */
while(fclose(ElencoTelefonico) != 0){
printf("\nErrore fclose\n");
chiusuraServer();
}
/* Valore ritornato in caso in cui il record richiesto non sia presente nell'archivio */
Record risultatoNullo = { "NULL", "NULL", "NULL" };
return risultatoNullo;
}
}
Mario Rossi 1
Luca Verdi 2
ecc.
cerco i rispettivi nominativi, per rossi tutto ok per verdi anche se è nello stesso file non trova nulla.
potreste aiutarmi proponendo una soluzione?
Record cercaRecord(Record record){
Record recordTemp;
/* Resetto i valori della struct recordTemp */
memset(recordTemp.nome, 0, sizeof(recordTemp.nome));
memset(recordTemp.cognome, 0, sizeof(recordTemp.cognome));
memset(recordTemp.numeroTelefono, 0, sizeof(recordTemp.numeroTelefono));
int cont=0;
/* Apertura dell'archivio "ElencoTelefonico.txt" */
if(( ElencoTelefonico = fopen("ElencoTelefonico.txt", "r")) == NULL){
printf("Non è possibile aprire l'elenco telefonico, verificare la consistenza dell'archivio");
chiusuraServer();
}
else{
/* Lettura del file e conteggio del numero di record presenti */
while(fscanf(ElencoTelefonico, "%s %s %s", recordTemp.nome, recordTemp.cognome, recordTemp.numeroTelefono) == -1){
printf("\nErrore fscanf\n");
chiusuraServer();
}
if(!feof(ElencoTelefonico)){
++cont;
}
/* Riposizionamento dell'indice di lettura del file */
rewind(ElencoTelefonico);
/* Rilettura del file alla ricerca del record richiesto */
for(int i=0; i<cont; ++i){
while(fscanf(ElencoTelefonico, "%s %s %s", recordTemp.nome, recordTemp.cognome, recordTemp.numeroTelefono) == -1){
printf("\nErrore fscanf\n");
chiusuraServer();
}
if((strcmp(record.nome, recordTemp.nome) == 0 && strcmp(record.cognome, recordTemp.cognome) == 0)){
while(fclose(ElencoTelefonico) != 0){
printf("\nErrore fclose\n");
chiusuraServer();
}
return recordTemp;
}
}
/* Chiusura del file */
while(fclose(ElencoTelefonico) != 0){
printf("\nErrore fclose\n");
chiusuraServer();
}
/* Valore ritornato in caso in cui il record richiesto non sia presente nell'archivio */
Record risultatoNullo = { "NULL", "NULL", "NULL" };
return risultatoNullo;
}
}