In effetti faceva strano anche a me, e infatti la documentazione che avevo guardato (su cplusplus.com) era sbagliata (e dire che lo so che è pieno di bachi quel sito...Originariamente inviato da aleye
grazie mille, anche se non capisco come sia possibile che il codice del libro sia sbagliato.); controllando sullo Standard (o su siti più affidabili come cppreference.com) ho visto che effettivamente in caso di fine stream cin.get() restituisce std::istream::traits_type::eof(); per cui puoi scrivere:
Ora, std::istream::traits_type è std::char_traits<char>, e lo standard dice che std::char_traits<char>::eof() restituisce EOF (definita in <cstdio>); dunque puoi anche scriverecodice:while ( ( grade = cin.get() ) != std::istream::traits_type::eof() )
come nel tuo codice originale, a patto di includere prima <cstdio>.codice:while ( ( grade = cin.get() ) != EOF )