The weirdness you are seeing is scanf() consuming parts of the entry to decide if it should proceed or fail the conversion...
The minus sign might be part of a valid number.
nan is a valid floating point value so na is consumed before it fails
Same with the last example naa starts with na which is consumed before it fails.
Generally there's no reason to be so verbose with users. They can see what they entered so just give them an error report such as printing Error : before the next prompt line.
Enter first number antidisestablishmentarianism
ERROR : Enter first number :
One thing people really hate is having to actually read the screen in front of them... Keep your user prompts short and sweet or they will simply ignore them.