замените
do{
cout << msg;
cin >> value; // Values assumed to be numbers
}
while (value <= 0 and value != -1);
на
do {
cout << msg;
if (!(cin >> value)) {
string dummy;
cin.clear(); // to be able to read double
cin >> dummy; // to remove the non float
value = 0;
}
while (value <= 0 and value != -1);
, вам нужно сбросить ошибку, чтобы иметь возможность читать снова, затем, чтобы обойти неправильный ввод, может быть, вы также можете просто прочитатьперсонаж, решить, что делать в случае ошибки
Пример:
#include <iostream>
using namespace std;
int main()
{
double value;
do {
cout << "value please" << endl;
if (!(cin >> value)) {
string dummy;
cin.clear();
cin >> dummy;
value = 0;
}
} while (value <= 0 and value != -1);
cout << "valid double :" << value << endl;
return 0;
}
Компиляция и выполнение:
% ./a.out
value please
aze
value please
-12
value please
12
valid double :12