Во-первых, мы должны понять, что в действительности делает цикл while.
while (cin >> *pchar) pchar++;
говорит, что продолжает получать данные от stdin
, пока cin
не обнаружил ошибку (или, если быть точным, пока !cin.fail() == true
).
Обратите внимание, что cin
в основном является объектом std::istream
.
Затем, во-вторых, мы должны понять, что заставляет std::istream::fail
возвращать true
.
Здесь они говорят, что std::istream::fail
возвращает true
, если установлены флаги badbit
или failbit
(и / или также, если возникает какая-либо не ошибка EOF).
Сказав это, Ctrl-Z на самом деле EOF (конец файла). И исходя из того, что я сказал выше, std::istream::fail
вернет true
, если возникнет ошибка none EOF, и, конечно, вернет false
, если EOF произойдет.
Короче говоря, EOF
/ Ctrl-Z не заставляет std::istream::fail
вернуть true
, следовательно, цикл продолжит работать.
Если вы действительно хотите, чтобы ваша программа перестала выполняться при нажатии EOF
/ Ctrl-Z, настройте ваш цикл на что-то вроде этого ...
while ((cin >> *pchar) && !cin.eof()) pchar++;
Теперь цикл выше читает, пока std::istream::fail() == false
и no EOF
/ Ctrl-Z введен символ, продолжайте цикл. Остальное прекратить петлю.
Надеюсь, это полностью ответит вам.