The scanf function skips over leading whitespace, with whitespace being the set of characters for which the isspace macro/function returns true.
In the standard locale, this set of characters consists of \t (0x09), \n (0x0a), \v (0x0b), \f (0x0c), and \r (0x0d). And, of course, the blank character (0x20).
The code between 80484c5 and 80484ce sets up the stack canary, and 80484e7 to 80484f3 checks it. gcc omits the stack checking from your second function, since it can determine (uses no pointers, doesn't call subroutines) that there's no way to overwrite the stack here. Your xor eax, eax isn't neccesary per se (you don't need to zero registers before storing ...
There is another interesting place in scanf library call when handling \x09~\0xd.
You just only put \x0b at the head of input string. If you just put \x0b in the middle of string, and there are valid ascii(not in \x09~\x0d) from head to the first \x0b, like
If you execute your program again, you will find the following Bs will be ...