para que sirve %*c
El asterisco indica que el valor se lee pero no se almacena. Siguiendo tu ejemplo:
La función scanf con:
1) "%c" lee un carácter y lo almacena en la variable "r".
2) " " descarta todo el espacio blanco (espacio, tabulador, avance de linea, etc.).
3) "%*c" lee un carácter, este se descarta.
Es útil en ciertos escenarios, por ejemplo para leer una linea de un máximo de 100 caracteres pero sin incluir el avance de linea (de forma similar a la función gets):
char linea[101]; /* +1 para el '\0' */
/* ... */
scanf("%100[^\n]%*c", linea
);
Con "%100[^\n]" se lee un máximo de 100 caracteres, la condición aquí es ser distintos de '\n' (el avance de linea), a continuación este se lee y descarta con "%*c".
Un saludo