Ho modificato un po il codice e ora funziona...ma nn capisco xke mi fa inserire ma quando gli chiedo di visualizzare mi ritorna al menu.....
codice:
#include<stdio.h> 
#include<string.h>
 #define N 10
 typedef struct{ 		char Nome[20]; 		
char Cognome[20]; 		
int Eta; 		
int flag; 	     
 } Persona; 
void inserisci(Persona *archivio1,int *i); 
void visualizza(Persona *archivio2,int *i);
 int main() 
{ 
Persona archivio[N];
 int i;
 int cnt_persona=0;
 int scelta;
 for(i=0;i<N;i++) archivio[i].flag=0; 
do{ 	printf("%s\n%s\n%s\n", 		"**************Menu************", 		
"0 per terminare,1 per inserire", 		
"2 per visualizzare"); 	
scanf("%d",&scelta); 	
switch(scelta){ 			
case 1:  inserisci(archivio,&cnt_persona);break; 				 				 			
case 2:	visualizza(archivio,&cnt_persona);break;   			
default: if(scelta!=0) printf("Hai sbagliato numero riprova\n"); 			
}    
}while(scelta != 0);
 return 0; 
} 
void inserisci(Persona *archivio1,int *i) 
{ 	int j=0; 	
          j= *i; 	
if(j<N) 	
{  		
if(archivio1[j].flag==0) 		
{ 			
printf("Inserisci Nome e Cognome\n"); 			scanf("%s%s",archivio1[j].Nome,archivio1[j].Cognome); 			
printf("Inserisci eta'\n"); 			
scanf("%d",&archivio1[j].Eta); 			
archivio1[j].flag=1; 			
j++; 		 		
} 	
} 	
else printf("Mi dispiace archivio pieno\n"); 	 
} 
void visualizza(Persona *archivio2,int *i)
 { 	int j=0; 
	j= *i; 	 	
for(j=0;j<N;j++) 	 	
if(archivio2[j].flag==1) 	
{ 	
printf("Persona #%d\nNome:%s\tCognome:%s\tEta:%d", 		j+1,archivio2[j].Nome,archivio2[j].Cognome,archivio2[j].Eta); 	
putchar('\n'); 	
} 	
 }