Los mensaje que hay después del while, se van a mostrar SIEMPRE, a no ser que les pongas alguna condición.
Pero antes de arreglar esto, quiero comentar otra cosa.
Tu condición del while es que (intentos == 10).
Pero, la variable intentos, no está siendo modificada nunca dentro del bucle, siempre tiene valor 10. Así que este bucle se va a repetir infinitamente.
Tú lo detienes por la sentencia break cuando el usuario dice que quiere adivinar, pero si no, el usuario tendría intentos infinitos.
Por cierto, ese break parece que se ejecuta SIEMPRE, debería ejecutase solo cuando el usuario dice que quiere adivinar, y además realmente la adivina.
Luego usas una variable llamada contador que va aumentando, pero luego no haces nada con ella.
Supongo que la intención es contar intentos y luego comparar su valor con la variable intentos, a ver si ya ha cumplido los 10. Esto debería ser en todo caso la condición del while, la comparación de estas dos variables, pero en realidad no necesitas a contador y lo podrías resolver solo con la variable intentos, haciendo que decremente en cada repetición del bucle hasta llegar a 0, que será lo que ponga fin al bucle.
Cuando se pide adivinar y el usuario da una respuesta, hay que comparar los arrays de char a ver si coinciden o no.
Me suena de que existe una función llamada memcmp() para comparar arrays.
Si no, siempre puedes escribir tu propia función para hacer la comparación.
Yo soy más de Java, no toco apenas el lenguaje C (en el título del post dices C++, pero esto me parece C "a secas") así que lo que voy a escribir lo hago sin estar seguro de si funciona o no.
Pero al menos servirá para dar una idea de cuál sería la lógica a aplicar.
Añado líneas de comentarios donde hago los principales cambios.
main(){
char palabra[10]="escuela"; //declaramos variables
char letras[10];
char respuesta[10]={};
char letra, opcion;
char letra2="s";
int i=0, intentos=10;
for( i=0; i<strlen(palabra); i++){
letras[i]='_';
}
do {
fflush(stdin);
printf("\nInserta una letra: ");
scanf("%c",&letra);
for( i=0; i<strlen(palabra); i++){
if(letra==palabra[i]){
letras[i]=letra;
}
}
for(i=0; i<strlen(letras); i++){
printf("%c", letras);
}
printf("\n¿Ya sabes la respuesta?: s/n: ");
scanf("%c",&opcion);
intentos--; //Descontamos un intento
if (opcion==letra2){
printf("\nEscribe la respuesta aqui: ");
scanf("%s",&respuesta[10]);
if (memcmp(palabra, respuesta, 10) == 0) {
printf("\nADIVINASTE");
break; //Solo rompemos bucle si se ha acertado
}
}
} while(intentos > 0); //Bucle termina cuando intentos se reduce a 0
//Si los intentos han alzando valor 0, es que el usuario no ha acertado palabra
if (intentos == 0) {
printf("\nLa palabra secreta es: escuela");
printf("\n\n¡SUERTE PARA LA PROXIMA!");
}
}