A parte che la logica di gioco non ha senso perché se continui a far tentare un giocatore finché non colpisce una nave è ovvio che vincerà sempre il primo di turno quindi non è nemmeno divertente giocare, inoltre non mostri all'utente i tentativi già fatti. Comunque, un problema fondamentale sta in queste righe ripetute 4 volte:
codice:
do{
		colpisci(c2,user1);
		stampa_colpito(c2,user2);
	}while (colpisci(c2,user1)==5);
Se l'utente indovina le coordinate alla prima chiamata di colpisci perché richiederglile una seconda volta nella condizione?
Le due chiamate non sono la stessa cosa perché la tua funzione colpisci ha degli effetti collaterali: chiede un input e modifica uno stato.

Il tuo codice presenta un altro grave problema: la duplicazione. Sembra fatto a ctrl-c e ctrl-v. La cosa che fa pesare ancora di più questi problema è che un errore logico è stato sparso in 3 punti diversi del codice.
As an aside, quello non è l'unico pezzo di codice duplicato.