Чтобы обнаружить ошибочный ввод строки, где вы ожидали число, C ++ автоматически не знает, что вы хотите, поэтому одним из решений является сначала принять ваш ввод как строки, проверить эти строки, затем, если они действительны, только затем преобразовать строки вчисла с плавающей запятой с использованием функции atof ().
В стандартном классе строк есть функция find_first_not_of (), которая помогает вам сообщить C ++, какие символы вы считаете допустимыми.Если функция находит символ, которого нет в вашем списке, она возвращает позицию плохого символа, в противном случае возвращается строка :: npos.
// add.cpp
#include <iostream>
#include <string>
#include <cstdlib> // for atof()
using namespace std;
void Add()
{
cout << "Please enter two numbers you wish "
<< "to add, separated by a white space:"
<< endl;
string num1, num2;
cin >> num1;
if( num1.find_first_not_of("1234567890.-") != string::npos )
{
cout << "invalid number: " << num1 << endl;
return;
}
cin >> num2;
if( num2.find_first_not_of("1234567890.-") != string::npos )
{
cout << "invalid number: " << num2 << endl;
return;
}
float x = 0, y = 0, z = 0;
x = atof( num1.c_str() );
y = atof( num2.c_str() );
z = x+y;
cout << x << " + " << y << " = " << z << "." << endl;
}
int main(void)
{
Add();
return 0;
}