Программа на C без возвращаемого значения приведет к неопределенному поведению (которое единодушно считается плохим). Компилятору разрешено свободно контролировать то, что он возвращает здесь, он, похоже, возвращает результат scanf (), но он может возвращать некоторую атмосферную энтропию для всех забот C Standard.
Что касается строки, не печатающей, то это потому, что вы используете printf () на буферизованном терминале, вам нужно добавить \ n в конце. Причина этого кроется в древних способах Unix, которые давно забыты всеми, кроме самых мудрых гуру Unix.
Что касается ничего не происходящего, пока вы не введете что-то, то это потому, что scanf () блокирует до тех пор, пока ввод не будет получен, на случай, если вы еще не знали об этом. Можно использовать неблокирующие вызовы ввода-вывода, но я не уверен, что это входит в сферу вашего вопроса. (пожалуйста, определите «сделать это правильно»).