Originariamente inviato da aleye
grazie mille, anche se non capisco come sia possibile che il codice del libro sia sbagliato.
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... ); 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:
codice:
   while ( ( grade = cin.get() ) != std::istream::traits_type::eof() )
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 scrivere
codice:
   while ( ( grade = cin.get() ) != EOF )
come nel tuo codice originale, a patto di includere prima <cstdio>.