у тебя цикл работает до тех пор, пока символ не будет равен EOF. этот символ ты не передаешь, поэтому выхода из цикла нет и он постоянно считывает ввод
EOF - как я понимаю, это символ конца потока.
Например, следющая конструкция копирует поток и работает прекрасно, а с подсчетом символов - беда какая-то.