Buona pasquetta a tutti![]()
poco fa mi sono imbattuto nel seguente dilemma, e non trovando tantissime risposte volevo chiedervi qualche consiglio. vi spiego il problema:
creo un nuovo file in modalità write con inserimenti " numerati "
per intenderci, il file riceve in ingresso i dati in questa maniera :
Ora il file dovrebbe essere scritto in questa maniera ( per facilità di lettura utilizzerò la tag del codecodice:printf("\nCompila i seguenti campi\n"); do{ printf("\nInserimento numero %d\n" ,i); printf("Nome:\n"); scanf("%s" ,&l.nome); printf("Cognome:\n"); scanf("%s" ,&l.cognome); printf("Codice:\n"); scanf("%d" ,&l.codice); fprintf(pf, "%d\n%s %s\n%d\n\n" , i, l.nome, l.cognome, l.codice); printf("Inserire -1 per terminare, qualunque altro numero intero per continuare\n"); scanf("%d" ,&spia); if(spia > -1) i++ }while(spia != -1); cls=fclose(pf); if(cls != 0) printf("\nErrore nella chiusura del file\n");
la mia domanda è la seguente:codice:1 Alessio bombolone 234321 2 Angelo Fonfofofo 3432324 e così via...
se io volessi leggere solo il numero dell'inserimento, ossia il numero che si trova sopra ogni nome (1 , 2 nell'esempio), in modo da utilizzarlo come indice-grandezza massima di un array. come potrei fare?
io avevo cominciato a pensare ad un piccolo algoritmo in via teorica, senza codice, ma su alcuni passi sono ancora dubbioso.
questo è stato il mio ragionamento :
devo ricercare il %d maggiore, anche se ricevo 2 %d diversi ( il numero più lungo, sotto il nome della persona) posso usare l'operatore modulo per distinguere su quale andrò a lavorare in quanto il codice della persona è sempre un numero pari, il numero d'inserimento è sempre dispari.
in particolare qui è sorto il primo dubbio: leggendo il file riga per riga, sarei obbligato a leggere anche i %s. o c'è un modo anche per scandire la lettura delle righe, leggendo solo i dati che a me interessano di più?
premesso è un esercizio, devo utilizzare il file e stavo pensando di indicizzare un array per poi favorire la cancellazione e la gestione degli elementi per indice.
Non è possibile utilizzare liste ( non è una mia scelta, non sono contemplate nella consegna )
Nel caso non fossi stato chiaro \o non poco pretenzioso np e grazie lo stesso
---------------Aggiornamento ------------------
Piccolo(credo) passetto avanti( forse sbagliato)
per ricavarmi l'indice e avere i successivi inserimenti in modalità append di modifica del file utilizzo, per ora il seguente codice )
questa funzione ritorna i, e salva in ind ( una variabile che ho messo come globale ) il numero dell'ultimo inserimento, il resto dei dati ( nome, cognome etc, tranne la I ) dovrebbero perdersi alla fine della funzionecodice:int grandezza_array(char nomefile[]){ FILE *pf; int i=0; Persona l={"","", 123456}; pf=fopen(nomefile, "r"); if(pf == NULL) printf("\n Errore nell'apertura del file\n"); while(!feof(pf) ) { fscanf(pf,"%d\n%s %s\n%d\n\n", &i, &l.nome, &l.cognome, &l.codice); } ind=i; printf("%d" ,ind); return i; }
fine aggiornamento![]()



Rispondi quotando
