l'errore segnalato da InferNOS è cmq un errore, il tuo problema però non è causato da quell'errore, anzi non è un errore.

La console quando esaurisce il buffer di output e quindi non ha niente altro da stampare si chiude, per evitare questo o usi il comando "pause" di windows o metti un qualsiasi sistema per intercettare l'input e bloccare il flusso.

o fai:

system("PAUSE");

o metti un getch(), un getchar() un altro scanf o altri sistemi di input


se non ti è chiaro il motivo per il quale si mette & davanti la variabile te lo spuego: in C come in altri linguaggi esistono i puntatori che praticamente contengono l'indirizzo di memoria della variabile, se tu passi i alla funzione, il valore che legge non saprà dove metterlo visto che tu gli passi il valore di i e non la sua posizione in memoria; quindi quando fai &variabile ottieni l'indirizzo di memoria di quella variabile, questo indirizzo può essere inserito in un puntatore che si dichiara cos':

Tipo* nome;

Prova a creare una variabile int i con valore 5 e a stampare il risultato di i e di &i. Vedrai che uno mostra 5 e l'altro qualcosa come 0x24153h o circa(l'indirizzo).

spero di essere stato chiaro.