Q: Why use white-space around "%*c"?
A: The white-space in " %*c" is a scanf() directive that skips white-spaces (0 or more) during the scan thus preventing "%*c" from itself reading a white-space. Without the leading white-space, "%*c" will scan any 1 char, white-space or not. The trailing white-space in "%*c " has no effect at all on what "%*c" already did. The trailing white-space directive simple skips subsequent white-spaces.
White-space in a format is not needed around "%*c", it depends on the coding goal.
Most specifiers, like "%d", "%f", "%s" skip leading white-spaces. (White-space being ' ', '\n', '\t', etc. see isspace()).
Simply having a format directive " " or "\n" also skips white-spaces.
3 specifiers "%c", "%n" and "%[scanset]" do not skip leading white-spaces.
Since many programmers want scanf() to skip leading white-spaces before a "%c" a preceding white-space is needed as in " %c".
Note: "%d %*c %d" will scan the same as "%d %*c%d".