Più che non avere senso è eccessivamente complicato. Sarebbe infatti meglio scrivere qualcosa come:
if (x == 's') {
/* ... caso risposta positiva .. */
} else (x == 'n') {
/* ... caso risposta negativa .. */
} else {
/* ... valore invalido ... */
}
Ma l'errore è probabilmente un altro. La seguente riga legge qualsiasi carattere da standard input, sia esso una lettera, un numero, uno spazio o il carattere di a capo o...
scanf("%c",&x);
Se quindi inserisci 's' e poi vai a capo, nella successiva lettura della risposta otterrai un carattere di a capo che è certamente diverso da 's' o 'n'.
Una soluzione pessima, ma che richiede pochissime modifiche nel tuo codice, è quella di scrivere
scanf(" %c", &x);
Inserendo uno spazio nella stringa di formato di scanf e famiglia si dice alla funzione di ignorare ogni spazio, tabulazione o a capo e iniziare a leggere il primo carattere diverso da questi. La soluzione in assoluto migliore sarebbe di dimenticarsi dell'esistenza di scanf e usare getchar.