Проблема в том, что вы используете две переменные error
while(error != false)
{
std::cout << "That's not a number!" << std::endl;
std::cin >> given;
bool error = std::cin.fail();
std::cin.clear();
}
В цикле вы объявили новую переменную. Замените объявление оператором присваивания
while(error != false)
{
std::cout << "That's not a number!" << std::endl;
std::cin >> given;
error = std::cin.fail();
std::cin.clear();
}
И вторая проблема заключается в том, что вам необходимо очистить буфер. Например,
#include <limits>
//...
std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
Цикл будет выглядеть следующим образом
#include <limits>
//...
while(error != false)
{
std::cout << "That's not a number!" << std::endl;
std::cin >> given;
error = std::cin.fail();
std::cin.clear();
std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
}