Tutte le righe in cui confronti giocatori[indice] con numeri o caratteri non hanno senso. Nel primo caso
codice:
if(giocatori[j] == 'S' || giocatori[j] == 's')
ti basta cambiare in
codice:
if(stricmp(giocatori[j],"s")==0)
; nel secondo caso non ha proprio senso questo genere di confronto, visto che (1) la lunghezza di una stringa si calcola con la funzione strlen e (2) se l'utente ha inserito più di MAX_NOME_GIOC caratteri il danno ormai è fatto, visto che è andato a sovrascrivere della memoria che non gli compete. Piuttosto puoi troncare l'acquisizione a 35 caratteri modificando la scanf in modo che acquisisca al massimo MAX_NOME_GIOC-1 caratteri; studiati la documentazione della scanf per capire come fare, e ricorda che il numero massimo di caratteri acquisibili è MAX_NOME_GIOC-1 perché devi contare che un char è occupato dal NUL finale. Per verificare che il nome inserito sia almeno di un carattere ti basta poi semplicemente verificare se il primo carattere è diverso da NUL, per cui
codice:
else if(!*giocatori[j])
{
    puts("Nome troppo breve!");
}
.
Inoltre l'else finale mi pare errato, visto che, lasciandolo, se l'utente non commette errori il programma smette di acquisire i nomi; infine, non ha senso restituire un singolo char.
---EDIT---
Tardi, sempre troppo tardi...