Возможно, проблема в том, что вы отправляете пустую строку, когда данных не осталось.
Вы должны изменить цикл, который вы используете.
Используйте цикл while {} (не цикл 'do while'). Это позволяет вам читать из потока и тестировать его в одном легко читаемом утверждении. Обратите внимание, что результатом iss >> word является поток. При использовании в этом логическом контексте он проверяется, чтобы убедиться, что состояние хорошее и его значение преобразовано во что-то, что может быть использовано условием while. Таким образом, если оператор >> подал на корректную работу, то цикл никогда не вводится.
istringstream iss(line);
string word;
while(iss >> word)
{
double x = lexical_cast<double>(word);
cout << x << endl;
}
Но на самом деле вам даже не нужно лексическое приведение в этой ситуации (если только вы не хотите проверять не числа с исключением). Стандартный оператор потока преобразует ввод в двойной.
istringstream iss(line);
double word;
while(iss >> word)
{
cout << word << endl;
}
if (iss.fail())
{ /* Failure to convert input to a double */
}