Ciao , secondo me se rendi le cose più semplici , e più facile che funzionino
potresti usare un while(!feof()) per contare le righe del file , poi riposizioni a inizio file
e con un altro while(!feof()) e strcmp () controlli che esista l'elemento cercato .
è una soluzione banale , forse troppo semplice , ma ho provato e funziona correttamente
ti posto il codice ,per tua curiosità!
codice:#include <stdio.h> #include <stdlib.h> typedef struct { char nickname[30]; char password[40]; int permesso; }Utente; Utente cercaNome(Utente utente); int main(int argc, char *argv[]) { Utente prova,risultati; strcpy(prova.nickname,"uno"); strcpy(prova.password,"xxxxxx"); prova.permesso=4; risultati=cercaNome(prova); printf("OUTPUT %s %s %d \n",risultati.nickname,risultati.password,risultati.permesso); system("PAUSE"); return 0; } Utente cercaNome(Utente utente) { Utente temp; Utente vuoto = { "NULL", "NULL", 0 }; //Utente non trovato int cont = 0; //Apro il file login FILE *f; f = fopen("login.txt","r"); //posizionato nella medesima cartella del programma.. if(f == NULL) { printf("Errore apertura elenco utenti\n"); goto fine; } while(!feof(f)) { fscanf(f,"%s %s %d",temp.nickname,temp.password,&temp.permesso); cont++; } printf("Numero utenti presenti: %d\n", cont); rewind(f); while(!feof(f)) { fscanf(f,"%s %s %d",temp.nickname,temp.password,&temp.permesso); if(strcmp(utente.nickname,temp.nickname) == 0) { fclose(f); return temp; } } fine: return vuoto; }

Rispondi quotando