[C] confrotare 2 campi di una struttura
Ciao,
so che è banale, ma in questo momento non riesco proprio ad uscirne...ho un file (rappresentante un filesystem) strutturato cosi:
D 1 / 0
D 2 var 1
D 3 usr 1
F 4 tmp 1
D 7 stud1 24
dove il primo è un char(D:directory, F:file)/ la seconda colonna è l'id di ogni singola ENTRY(riga del file)/la terza colonna è il nome della entry/la quarta colonna è l'id della entry che contiene la entry in questione(id_contenitore)
devo fare delle funzioni che verifichino che il file .txt dato non sia corrotto...
Una di queste consiste nel verificare che l'id_contenitore (4a colonna) sia dichiarato in una delle altre entry, altrimenti il file è corrotto--->(nell'esempio sopra la entry con id=7 porta a file corrotto, perche' id=24 non è dichiarato)
ho fatto il seguente codice che pero' non funziona, ma proprio non capisco perchè no...

In pratica per ogni id_contenitore, scorro la colonna degli id, e se non trovo nessuna corrispondenza la variabile trovato viene posta uguale a 1..
so che è banale, ma in questo momento non riesco proprio ad uscirne...ho un file (rappresentante un filesystem) strutturato cosi:
D 1 / 0
D 2 var 1
D 3 usr 1
F 4 tmp 1
D 7 stud1 24
dove il primo è un char(D:directory, F:file)/ la seconda colonna è l'id di ogni singola ENTRY(riga del file)/la terza colonna è il nome della entry/la quarta colonna è l'id della entry che contiene la entry in questione(id_contenitore)
devo fare delle funzioni che verifichino che il file .txt dato non sia corrotto...
Una di queste consiste nel verificare che l'id_contenitore (4a colonna) sia dichiarato in una delle altre entry, altrimenti il file è corrotto--->(nell'esempio sopra la entry con id=7 porta a file corrotto, perche' id=24 non è dichiarato)
ho fatto il seguente codice che pero' non funziona, ma proprio non capisco perchè no...


In pratica per ogni id_contenitore, scorro la colonna degli id, e se non trovo nessuna corrispondenza la variabile trovato viene posta uguale a 1..


void entry_orfano(ENTRY *r,int n) { int i=0,temp=0,trovato=0,err=0,j=0; for(i=1;i<n+1;i++) { temp=r[i].id_contenitore; for(j=1;j<n+1;j++){ if(temp!=r[j].id){ trovato=1; err=r[j].id; } } } if(trovato==1){ printf("IL FILE è CORROTTO ----> ERRORE:l'entry #%d è orfana!\n",err); return; }else{ return; } }
Risposte
Ciao,
così a prima vista mi sembrano molto strani quei cicli for che iniziano da $1$ e finiscono in $n+1$. Coma mai fai così? A meno di motivi particolari gli indici dovrebbero essere $0 <= i < n$, quindi
così a prima vista mi sembrano molto strani quei cicli for che iniziano da $1$ e finiscono in $n+1$. Coma mai fai così? A meno di motivi particolari gli indici dovrebbero essere $0 <= i < n$, quindi
for(i=0; i<n; ++i) ...
EDIT
Ho visto quello che mi sembra un altro errore: se temp è diverso da r[j].id poni trovato = 1... ma quando poni trovato = 0?
Ho visto quello che mi sembra un altro errore: se temp è diverso da r[j].id poni trovato = 1... ma quando poni trovato = 0?
