Salve a tutti, ogni volta che provo a compilare un progetto il compilatore mi da una serie di errori, ma non riesco a capire perchè (a me non sembra ci siano errori di sintassi). Vi posto per esempio il programma che sto facendo e vi sarei grato se riusciste a farmi capire cosa/dove sbaglio. Il programma non è terminato ma in teoria dovrebbe comunque potersi compilare perchè non dipende dalle parti mancanti. Grazie
codice:
|*TREE.H*|
#ifndef _TREE_INCLUDED
#define _TREE_INCLUDED

#define N 50

typedef tree tree_t;
void scanFile (FILE*);
void descendents (char*, char*);
int brothers (char*, char*);
#endif
codice:
|*TREE.C*|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Tree.h"

typedef struct tree {
	char name [N];
	char surname [N];
	char gender;
	int age;
	int parents [2];
};

static tree_t **ar;
static int n;
static int desc=0;

int hash (char *, char*);

void scanFile (FILE *fp) {
	int i, index, ageTmp;
	char nameTmp [N], surnameTmp [N], genderTmp, fatherN [N], fatherS [N], motherN [N], motherS [N];

	fscanf (fp, "%d", &n);
	ar= malloc (N*sizeof (tree_t*));
	if (ar== NULL) {
		printf ("allocation error \n");
		exit (-2);
	}
	for (i=0; i<n; i++) {
		ar [i]= malloc (sizeof (tree));
		if (ar [i]== NULL) {
			printf ("allocation error \n");
		    exit (-2);
		}
	}
	for (i=0; i<n; i++) {
		fscanf (fp, "%s %s %c %d", nameTmp, surnameTmp, &genderTmp, &ageTmp);
		index=hash (nameTmp, surnameTmp);
		strcpy (ar [index]->name, nameTmp);
		strcpy (ar [index]->surname, surnameTmp);
		ar [index]->gender= genderTmp;
		ar [index]->age= ageTmp;
	}
	while (fscanf (fp, "%s %s %s %s %s %s", nameTmp, surnameTmp, fatherN, fatherS, motherN, motherS)!= NULL) {
		index= hash (nameTmp, surnameTmp);
		(*ar) [index]->parents [0]= hash (fatherN, fatherS);
		(*ar) [index]->parents [1]= hash (motherN, motherS);
	}
}

void descendents (char* name, char* surname) {
	int index=0, i;
	index= hash (name, surname);
	for (i=0; i<n; i++) {
		if ((index== ar [i]->parents [0]) || (index== ar [i]->parents [1])) {
			desc++;
			descendents (ar [index]->name, ar [index]->surname);
		} else return;
	}
}

int brothers (char* name, char* surname) {
	int index, father, mother, brotherN=0, i;

	index= hash (name, surname);
	father= ar [index]->parents [0];
	mother= ar [index]->parents [1];
	for (i=0; i<n; i++) {
		if ((ar [i]->parents [0]== father) || (ar [i]->parents [1]== mother)) {
			brotherN++;
		}
	}
}

int hash (char* name, char* surname) {
	return 1;
}
codice:
|*MAIN.C*|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Tree.h"

void filename (char**);
char *personName (char**);
char *personSurname (char**);

int main () {
	char *name, choice, *perName, *perSurname;
	FILE *fp=NULL;

	filename (&name);
	fp= fopen (name, "r");
	if (fp== NULL) {
		printf ("error opening the file\n");
		return -1;
	}
	scanFile (fp);
	while (choice!='e') {
	    printf ("Select an option:\n");
	    printf ("count descendents (a)?\n");
	    printf ("count longest  (b)?\n");
		printf ("count the longest descent (c)?\n");
		printf ("count the number of brothers and sisters (c)\n?");
	    printf ("exit (d)?\n");
		scanf ("%c", choice);
		switch (choice) {
		case 'a': 
			descendents (personName (&perName), personSurname (&perSurname));
			free (perName);
			free (perSurname);
			break;
		case 'b':
		case 'c':
			brothers (personName (&perName), personSurname (&perSurname));
			free (perName);
			free (perSurname);
			break;
		case 'd': 
			break;
		default:
			printf ("error: unknown option\n");
			break;
		}

	}
	return 0;
}

void filename (char **name) {
	char nameTmp [N];
	printf ("insert file name: ");
	scanf ("%s", nameTmp);
	(*name)= malloc (sizeof (nameTmp));
	if (*name== NULL) {
		printf ("allocation error\n");
		exit (-2);
	}
	strcpy (*name, nameTmp);
	return;
}

char *personName (char **name) {
	*name= malloc (N*sizeof (char));
	if (*name== NULL) {
		printf ("allocation error \n");
		exit (-2);
	}
	printf ("insert name: ");
	scanf ("%s", *name);
	return *name;
}

char *personSurname (char **surname) {
	*surname= malloc (N*sizeof (char));
	if (*surname== NULL) {
		printf ("allocation error \n");
		exit (-2);
	}
	printf ("insert surname: ");
	scanf ("%s", *surname);
	return *surname;
}