Tak, chodzi o ASCII choć z tego co pamiętam w innych kodowaniach też tak jest, ze znaki alfanumeryczne są po spacji. Interesują nas: spacja, tabulator, znak nowej linii i znak końca pliku, wszystkie mają kody mniejsze/równe spacji (w ASCII 32). Dodatkowe sprawdzenie .eof() jest po to, żeby się zatrzymać funkcję .peek() jeśli napotkano koniec pliku.
Nie do końca rozumiem pytania więc odpowiem dwojako. Do takiego zastosowania jakie chcemy uzyskać nie można napisać:
char ch;
cin>>ch;
bo cin pomija białe znaki i wczyta pierwszy niebiały do zmiennej ch.
Tą instrukcję, która podałem można skrócić tak:
while(cin.peek() <= ' ' && cin) cin.get();
bo jeśli flaga eof zostanie ustawiona to cin przy konwersji na wartość logiczną zwróci false.
Można natomiast, jak najbardziej, tak jak wspomniałem, cały program napisać w oparciu o
long a;
while(cin>>a){
...