A me funziona! Commetti l'errore di voler scrivere il menu all'interno della funzione ricorsiva, separa le cose, se proprio vuoi che sia la libreria a scrivere il menu metti una funzione che fa quello.
main.c
#include <stdlib.h>
#include <stdio.h>
#include "targhe.h"
/*GESTIONE TARGHE v. 1.0*/
int main(int argc, char *argv[]) {
int d;
char c;
int esci=1;
targhe a = malloc (sizeof(struct targa));
if(a==NULL) {
printf("Errore allocazione!\n");
exit(-1);
}
printf("GESTIONE TARGHE ver. 1.0\n");
printf("Scrivi Una targa:\n");
scanf("%d%*c", &d);
a->info = d;
a->next = NULL;
do {
printf("AZIONI:\n");
printf("Premi A per aggiungere una targa\n");
printf("Premi S per stampare la lista di targhe\n");
printf("Premi E per uscire\n");
scanf("%c%*c",&c);
if (c=='a' || c=='A') {
printf("Scrivi la targa che vuoi aggiungere\n");
scanf("%d%*c", &d);
addtargacoda(a ,d);
}
if (c=='s' || c=='S')
stampatarga(a);
if(c=='e' || c=='E')
esci=0;
} while(esci);
system("PAUSE");
return 0;
}
targhe.h
#ifndef TARGHE_H_INCLUDED
#define TARGHE_H_INCLUDED
/*definizione struttura targhe*/
typedef struct targa {
int info;
struct targa *next;
} targa;
typedef struct targa *targhe;
void addtargacoda(targhe, int);
void stampatarga(targhe);
struct targa * talloc(void);
#endif // TARGHE_H_INCLUDED
targhe.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "targhe.h"
/*allocatore di memoria per eventuali nodi*/
struct targa *talloc(void) {
targhe t = malloc (sizeof(struct targa));
if(t==NULL) {
printf("Errore allocazione!\n");
exit(-1);
}
return t;
}
/*operazioni su targa*/
void addtargacoda(targhe a, int c) {
if(a->next == NULL) {
a->next = talloc();
a->next->info = c;
a->next->next = NULL;
return ;
}
addtargacoda(a->next, c);
}
void stampatarga(targhe a) {
if (a == NULL) {
printf("\n");
return;
}
{/*Stampa risultato ben formattato */
printf("%d", a->info);
if(a->next!=NULL)
printf("->");
}
stampatarga(a->next);
}