Does scanf() take '\n' as input leftover from previous scanf()?

scanf leaves the input stream pointing to the \n. In your case it doesn't make a difference: each time it's called, scanf will move along until it finds the next non-whitespace character. So giving it 10 lines of name, a, b as input will work as you expect.

But consider this:

scanf("%d", &a);
fgets(str, 20, stdin);

fgets reads until it finds the first newline character, so str will just get a value of \n, and fgets will not read the next line of input.