[C] confrotare 2 campi di una struttura

frab1
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... :cry: :cry:
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.. :?: :roll:
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
minomic
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

for(i=0; i<n; ++i)
...

minomic
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? :D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.