Sure there is a way to do that. Have a look at ncurses. I think that is the way to go.
Yes and no. C language has no notion of input and output. It relies on a standard library (essentially written in C) that in turn relies on system calls. Neither the standard library, nor the set of system calls common to Unix-like systems and Windows deal with non blocking system...