Так что я проваливаю простой входной тест для одного из заданий. Я должен разобрать два целых числа, разделенных пробелом. Два целых числа используются в приватных членах 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;
}
Ваш код дает сбой, по крайней мере, двумя очевидными способами:
'\t'
, это не распознается вашим кодом."a b"
а не цифры.Обычно при сбое ввода значение value остается неизменным. Это также не относится к вашей реализации. Чтобы исправить ситуацию, код может быть упрощен и значительно упрощен в процессе. Поскольку это, очевидно, домашнее задание, я не думаю, что уместно предоставлять код, хотя.
Этот код проходит тест!
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;
}