L'uso del goto e delle if, anche se concordo con andbin, la comprendo almeno finche' non migliorerai il tuo livello/stile di programmazione.

Ma il fatto di richiamare la main all'interno della stessa main, e' un *grave* errore che dovresti correggere ...

Se richiami una funzione all'interno della stessa funzione, la stai usando *ricorsivamente*.
La chiamata di funzione NON e' equivalente al goto in quanto, quando una funzione termina, il controllo ritorna al codice che l'ha richiamata. In questo modo, in pratica, rischi di riempire lo stack ed ottenere un malfunzionamento di cui non ti spieghi il motivo ...

Il main deve terminare con un return quando termina il programma e deve essere ripetuto in un ciclo se necessario.