Ciao a tutti. Ho qualche problema con un programmino il cui compito è quello di gestire un file contenente le informazioni di alcuni oggetti (nello specifico il numero del record, il nome, la quantita di oggetti e il prezzo). Per gestione intendo: la visualizzazione del contenuto del file. Tale file, per essere precisi, non deve esistere in memoria, ma deve essere creato al momento dell'inserimento del primo elemento. I problemi che ho sono 3:
1 - Quando vado ad inserire il primo elemento, apparentemente il tutto funzione correttamente creandomi il file, tuttavia quando vado per accedervi, mi dice che il tipo di file non è supportata (non credo sia dovuto al fatto che utilizzo Ubuntu 12.10)
2 - Non riesco a realizzare la funzione che visualizza il contenuto del file. Se il file è vuoto mi deve restituire un messaggio a video dove indica appunto l'assenza di elementi nel file, altrimenti il contenuto stesso. Da notare una cosa: la specifica dell'esercizio dice che il numero del record indica anche la posizione dell'elemento all'interno del file (mi sono dimenticato di dirvi che il file può contenere massimo 100 elementi).
3 - nella funzione modifica mi dà errore di segmentazione ma non riesco a trovare dove ho sbagliato. Mi potete dare un indizio?
Ecco il codice che ho scritto 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
       
        int numRecord;
		char nome[20];
		int quantita;
		float prezzo; 
		int cancellato;  }attrezzo;
attrezzo a[100];
attrezzo a1;
FILE *fp;
void Elenca();
void Inserisci();
void Ricerca();
void Modifica();
void Cancella();
int main() {
	
	int scelta;
    
    do {
		
		printf("GESTIONE ARCHIVIO ATTREZZI");
		printf("\n1. Visualizza il contenuto del file");
		printf("\n2. Inserisci un record");
		printf("\n3. Ricerca uno attrezzo");
		printf("\n4. Modifica i dati di un attrezzo");
		printf("\n5. Cancella un record");
		printf("\nFa la tua scelta: ");
		
		scanf("%d", &scelta);
		
		if ((scelta > 5) || (scelta < 1))
			
			printf("\nScelta non valida. Riprova!");
			
		switch (scelta)  {
			
			    case 1: Elenca(); break;
			
				case 2: Inserisci(); break;
				
				case 3: Ricerca(); break;
				
				case 4: Modifica(); break;
				
				case 5: Cancella(); break; }   
     }while (scelta != 6);
system("PAUSE");
return 0;
}
void Elenca() {
	
	... //devo farla
/* inserimento di un record */
void Inserisci()  {
	
	fp = fopen("Hardware", "w");
 	
	printf("\nINSERISCI NUOVO STRUMENTO:\n");
	
	printf("numero record ");
	scanf("%d", &a1.numRecord);
	
	printf("nome: ");
    scanf("%s", a1.nome);
	printf("quantita: ");
	scanf("%d", &a1.quantita);
	printf("prezzo: ");
	scanf("%f", &a1.prezzo);
	a1.cancellato = 0;
       
    fwrite(&a1, sizeof(attrezzo), 1, fp);
    
    fclose(fp);
    printf("\nInserimento effettuato!\n");
}
/* ricerca di un record */
void Ricerca() {
	
	char nome_cercato[20]; 
	
	int trovato = 0;
    if ((fp = fopen("Hardware", "r")) == NULL)
    
		printf("\nErrore. L'archivio non esiste!\n");
	
	else  {
		
		printf("\nattrezzo da cercare: ");
		scanf("%s", nome_cercato);
		while ((!trovato) && (!feof(fp))){
		
		fread(&a1, sizeof(attrezzo), 1, fp);
		
		if (!strcmp(a1.nome, nome_cercato) && (a1.cancellato == 0)) {
		
				trovato = 1;
				
				printf("\nNumero Record: %d", a1.numRecord);
				printf("\nNome: %s", a1.nome);
				printf("\nQuantita: %d", a1.quantita);
				printf("\nPrezzo: %.2f\n", a1.prezzo);
				
             }
         
         }
          
        fclose(fp);
         
        if (!trovato)
				
				printf("\nIl record cercato non esiste!\n");
		
		}
		
		system("pause");
	
	}
/* modifica di un record */
void Modifica() {
	
	char nome_cercato[20];
	
	int trovato = 0;
	
	if ((fp = fopen("Hardware", "r+")) == NULL)
	
		printf("\nErrore. L'archivio non esiste!\n");
	
	else {
		
		printf("\nNome da modificare: ");
		scanf("%s", nome_cercato);
		
		while ((!trovato) && (!feof(fp)))  {
			
			fread(&a1, sizeof(attrezzo), 1, fp);
			
			if (!strcmp(a1.nome, nome_cercato) && (!a1.cancellato)) {
					
					trovato = 1;
					printf("\n\n");
			
			
			printf("Nuova quantita: ");
			scanf("%d", &a1.quantita);
			printf("Nuovo costo: ");
			scanf("%f", &a1.prezzo);
			
			fseek(fp, -48, SEEK_CUR);
			
			fwrite(&a1, sizeof(attrezzo), 1, fp);
			
			printf("\nModifica effettuata!\n");  }
	
	         }
		    fclose(fp);
		
		    if (!trovato)
			
			printf("\nIl record cercato non esiste!\n"); }
			
			system("pause");  }	
/* cancellazione di un record */
void Cancella() {
		
		char nome_cercato[20]; 
		
		int trovato = 0;
		
		if ((fp = fopen("Hardware", "r+")) == NULL)
			
			printf("\nErrore. L'archivio non esiste!\n");
		
		else {
			printf("\nNome da cancellare: ");
			scanf("%s", nome_cercato);
		
		while ((!trovato) && (!feof(fp)))  {
			
			fread(&a1, sizeof(attrezzo), 1, fp);
		
		if (!strcmp(a1.nome, nome_cercato) && (!a1.cancellato)) {
				
				trovato = 1;
				
				a1.cancellato = 1;
				
				fseek(fp, -48, SEEK_CUR);
				
				fwrite(&a1, sizeof(attrezzo), 1, fp);
				
				printf("\nCancellazione effettuata!\n");
			
		     	}
       }
	fclose(fp);
	
	if (!trovato)
	
	printf("\nIl record cercato non esiste!\n");
	
		}
	
	system("pause");
	
	}
Spero possiate aiutarmi =)