Цин в цикле

Итак, я осмотрелся и не смог понять, что происходит с cin во время цикла «Пока». Я работаю над книгой C ++ Primer (5-е издание) и заметил, что во время одного из упражнений я не мог использовать cin для захвата строк без прерывания цикла while. Я исправил эту проблему, просто используя getline ().

Цель данного упражнения - запросить вводимые пользователем значения от 0 до 15 и преобразовать это число в «Hex Equivelant» (где 0 = 1, 1 = 2, 2 = 3, ..., 10 = А, 11 = В). Я попытался сделать это без книги и потерпел неудачу, но затем начал подвергать сомнению код в книге. Вот код в книге:

//Note: <iostream> and <string> have been included. using namespace std is used 
const string hexdigits = "0123456789ABCDEF";
cout << "Enter a series of numbers between 0 and 15"
     << " separated by spaces. Hit ENTER when finished: "
     << endl;
string result;
string::size_type n;

while(cin >> n)
    if (n < hexdigits.size())
        result += hexdigits[n];
cout << "Your hex number is: " << result << endl;

Если бы я запускал этот код, он никогда не завершил бы цикл while после нажатия клавиши enter без ввода какого-либо кода (по сути, давая ввод пробела, я бы подумал?).

Я здесь по двум причинам:

1) Почему этот код не работает? 2) Я был бы признателен за толчок в правильном направлении, но не за ответ, как заставить этот код работать правильно

Если я не могу получить причину 1 без ущерба для причины 2, я бы предпочел, чтобы причина 1 была выполнена.

Быстрое редактирование: извиняюсь, я использую Visual Studio 2012

Ответы на вопрос(5)

Ваш ответ на вопрос