Мой код показывает разные результаты на разных IDE.Для ввода 1//2
в моей IDE он показывает ошибку формата ввода, но в другой IDE он выдает DivisionByZero
.
Я пробовал включить in.peek() == '/'
, даже если это не имеет смысла, но безрезультатно.
struct DivisionByZero : public exception {
const char * what() const throw() {
return "Zero Denominator";
}
};
Конструктор для оператора R
R::R(int n, int d)
{
if (d==0)
{
throw DivisionByZero();
}
n_ = n * (d / abs(d));
d_ = abs(d);
}
>>
std::istream &operator>>(std::istream &in, R &r){
int n, d;
in >> n;
if (in.peek() == '/')
{
in.ignore();
if ( (in.peek() < '0' || in.peek() > '9') ){
in.setstate(ios_base::failbit);
}
in >> d;
r = R(n, d);
}
return in;
}
основной () код :
R n1, n2;
char op;
try
{
while (cin >> n1 >> op >> n2) {
switch (op) {
case '+':
cout << n1 + n2 << endl;
break;
case '-':
cout << n1 - n2 << endl;
break;
case '*':
cout << n1 * n2 << endl;
break;
case '/':
cout << n1 / n2 << endl;
break;
}
}
}
catch(DivisionByZero& e){
cerr << e.what();
return 1;
}
if (cin.fail())
{
cin.clear();
cerr << "Input format error before '" << char(cin.peek()) <<"'";
return 2;
}
return 0;
Ожидаемый результат : Input format error before '/'
Фактический выход : Zero Denominator