• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Problema risolto Da file a struct

Pampers

Utente Senior
Autore del topic
10 Luglio 2012
1.641
0
Miglior risposta
0
Ciao ragazzi,

ho un problemino. In pratica quello che voglio fare è trasferire alcuni dati scritti su un file in una struct, o meglio in un vettore di struct.
Mettiamo caso che il file "prova.txt" abbia come contenuto:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
e che io voglia inserire i dati nella
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
in modo da visualizzare in ciao[0].uno la scritta "ciao", in ciao[0].due la scritta "come", in ciao[0].tre la scritta "stai" ecc...

La mia idea iniziale era quella di aprire il file in lettura, usare un array char di appoggio per fare il getline (in modo da inserire in appoggio la prima riga del file) e successivamente lavorare sull'array di appoggio.
Fin qui tutto ok.
Quindi lavoro sull'array di appoggio. Ora scandisco ogni carattere dell'array di appoggio con un ciclo while. La condizione del mio ciclo è, siccome ho usato come separatore il punto e virgola, che il ciclo si fermi quando incontra un punto e virgola.
Uso una variabile int inizializzato a zero, che mi fa capire in che campo sto agendo. Questa variabile si incrementa ogni volta che incontro un punto e virgola. All'inizio è zero quindi significa che sto lavorando su "ciao" (nel file) e sul campo ciao[0].uno (nella struct). Quando si incrementerà, il programma inserirà i caratteri nel campo ciao[0].due.
Quindi facciamo caso che io sia a inizio ciclo, e quindi dovrebbe mettermi il carattere 'c' di "ciao" in ciao[0].uno (il puntatore 'i' è una variabile che incremento ogni volta e che azzero ogni volta che incontro il punto e virgola).

Il problema è che quando compilo ed eseguo il programma, crasha.
Conoscete un altro modo per risolvere il mio problema?

Metto qui il codice che feci un paio di giorni (scusate, può darsi che sia un po' diverso dalle indicazioni che ho detto precedentemente):
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

file "prova.txt":
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
Ultima modifica:
Ho fatto così io
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Ti ho commentato dove non andava bene e cosa ho cambiato... stai attento solo che la variabile buffer che ho usato nella funziona lavora non è protetta da overflow all'interno del ciclo while (in pratica se una parola è lunga più di 9 caratteri il comportamento non è corretto. Lascio a te l'aggiunta di questo controllo o eventuali altre modifiche)
 
Ho fatto così io
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Ti ho commentato dove non andava bene e cosa ho cambiato... stai attento solo che la variabile buffer che ho usato nella funziona lavora non è protetta da overflow all'interno del ciclo while (in pratica se una parola è lunga più di 9 caratteri il comportamento non è corretto. Lascio a te l'aggiunta di questo controllo o eventuali altre modifiche)

Ho risolto integrando un po' del tuo programma, ma comunque ho scoperto che ahimè l'errore era la mancanza di un'incremento di una variabile nella funzione "lavora" :cry2:
Comunque, perchè non è necessario passare dim per reference? La dimensione mi servirà poi per fare altre operazioni sull'array di struct, per questo l'ho messa via reference.
 
Ho risolto integrando un po' del tuo programma, ma comunque ho scoperto che ahimè l'errore era la mancanza di un'incremento di una variabile nella funzione "lavora" :cry2:
Comunque, perchè non è necessario passare dim per reference? La dimensione mi servirà poi per fare altre operazioni sull'array di struct, per questo l'ho messa via reference.

Si, non ho risolto solo l'errore (oltre a quello che hai detto tu non gli assegnamenti delle stringhe non andavano bene)... ho cercato di modificare alcune cose in modo che risultassero più comode da utilizzare.
Comunque dim lo puoi passare tranquillamente per copia tanto poi nella funzione non è necessario modificarlo (ed è meglio passarlo per copia per escludere modifiche involontarie).
Segno risolto ;)
 
Si, non ho risolto solo l'errore (oltre a quello che hai detto tu non gli assegnamenti delle stringhe non andavano bene)... ho cercato di modificare alcune cose in modo che risultassero più comode da utilizzare.
Comunque dim lo puoi passare tranquillamente per copia tanto poi nella funzione non è necessario modificarlo (ed è meglio passarlo per copia per escludere modifiche involontarie).
Segno risolto ;)

Ops! Errore di distrazione... è vero, tanto dim lo incremento direttamente nell'int main quindi non c'è bisogno di passarlo per ref. Perfetto, grazie per l'aiuto, ;)