Il mio programma deve richiedere l'inserimento dei campi nome, cognome e età, che compongono un record. Devo implementare una lista di record e stamparli su file. Inserisco il codice qui sotto (quello costruito da me), in fondo vi posto la domanda:


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

typedef struct a{
char nome[21];
char cognome[21];
int eta;
struct a *next;
}anag;

/*richiamo alla funzione che memorizza la lista dei record anagrafici*/
anag *anagrafia();

/*richiamo alla funzione di stampa dei record su file*/
void stampa(FILE *f, anag *lista);


int main(int arg, char* args[])
{
char s;
anag *head; //primo elemento della lista
anag *p;
FILE *destinazione;


if(arg!=2)
printf("Errore di esecuzione: inseriti parametri inesatti"
" al lancio del programma. Dev'essere della forma (il file"
" di destinazione deve gia' esistere):\n"
"fileDaEseguire fileDiDestinazione.\n");

else{
printf("Digitare i dati del primo record:\n");
head = anagrafia();
p=head;

do{
printf("Digitare [s] per introdurre un altro record,"
" qualunque altro tasto per terminare:\n");
scanf("%c", &s);
p->next=anagrafia();
p=p->next; //p punta alla fine della lista
}while(s=='s'||s=='S');


destinazione = fopen(args[1], "w");
stampa(destinazione, head);
printf("Operazione giunta a buon fine. I record sono stati"
" stampati sul file %s.", args[1]);
fclose(destinazione);
}
getch();
}

/*Definizione della funzione che permette di memorizzare i campi anagrafici
per la creazione della lista.*/

anag *anagrafia(){

/*Creazione del nodo, ovvero un puntatore contenente i campi della
struttura creata.*/
anag *nodo=(anag *)malloc(sizeof(anag));

printf("Inserire il nome (massimo 20 caratteri):\n");
scanf("%s", nodo->nome);
printf("Inserire il cognome (massimo 20 caratteri):\n");
scanf("%s", nodo->cognome);
printf("Inserire l'eta':\n");
scanf("%d", &(nodo->eta));

/*Pone il campo next della struttura (anch'esso una struttura uguale
all'intera struttura creata) vuota, poichè la funzione descrive solo un
record e non è fatta per creare un altro record. L'aggiunta di un
eventuale nuovo record è fatto nel main.*/
nodo->next=NULL;

return nodo;
}


void stampa(FILE *f, anag *lista) {

anag *p; /*puntatore ad un elemento della lista*/

p = lista;

fprintf(f, "Elenco dei record memorizzati \n");
fprintf(f, "*******************\n");

/*scorrimento della lista per la stampa degli elementi fino a che p
punta a NULL, ovvero in fondo alla lista*/
while (p != NULL) {
fprintf(f,"nome = %s\n", p->nome);
fprintf(f,"cognome = %s\n", p->cognome);
fprintf(f,"eta' = %d\n", p->eta);
fprintf(f, "*******************\n");

p = p->next;
}

return;
}



Eseguendolo mi permette di scrivere il record una volta, quindi appare la richiesta se desidero inserire di nuovo il record, ma non mi permette di scegliere: semplicemente mi obbliga a scrivere un secondo record. Dopodichè non mi domanda più se desidero inserire il record e termina.
Secondo me il problema sta nel punto che ho segnato di rosso.
Qualcuno ha un'idea?

Grazie