Перегруженный оператор ввода не проходит автоматическое простое тестирование ввода

Так что я проваливаю простой входной тест для одного из заданий. Я должен разобрать два целых числа, разделенных пробелом. Два целых числа используются в приватных членах num и denom типа Rationalnumber, который я определил как класс. Есть что-то явно нестандартное, что я использую в этом коде или отсутствует? Этот код работает для всех моих тестов.

std::istream &operator>>( std::istream &is, Rationalnumber &r ) {
Rationalnumber::in++;   // increment counter

// get the num
string n;
getline(cin,n,' ');
stringstream ssnum(n);
ssnum >> r.num;

// get the denom
string d;
getline(cin,d,'\n');
stringstream ssdenom(d);
ssdenom >> r.denom;

return is;
}

0

Решение

Ваш код дает сбой, по крайней мере, двумя очевидными способами:

  1. Если используется пробел, отличный от пробела, например, '\t', это не распознается вашим кодом.
  2. Оператор ввода не указывает на сбой, когда ему даны неверные входы, например, когда вход "a b" а не цифры.

Обычно при сбое ввода значение value остается неизменным. Это также не относится к вашей реализации. Чтобы исправить ситуацию, код может быть упрощен и значительно упрощен в процессе. Поскольку это, очевидно, домашнее задание, я не думаю, что уместно предоставлять код, хотя.

1

Другие решения

Этот код проходит тест!

std::istream &operator>>( std::istream &is, Rationalnumber &r ) {
Rationalnumber::in++;   // increment counter

int in;
is >> in;
r.numerator(in);
is >> in;
r.denominator(in);

return is;
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector