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