Мне нужно создать функцию перегрузки оператора istream для чтения данных, которые вводит пользователь. Функция должна читать как одиночные символы, так и одиночные цифры, игнорируя символы, поскольку только цифры должны быть введены и распечатаны. Он считывает данные, входящие в систему, но когда они распечатываются, вместо этого они печатают странные символы. Я поставляю свою istream >> функцию вместе с моей функцией выхода <<, хотя я уверен, что проблема должна быть где-то внутри istream. если кто-нибудь может увидеть ошибку, которая была бы удивительной, поскольку я работал над этой единственной проблемой весь день.
friend ostream& operator<< (ostream& os, const MyInt& x);
friend istream& operator>> (istream& is, MyInt& x);
ostream& operator<< (ostream& oS, const MyInt& x)
{
for (int i = 0; i < x.currentSize; i++)
{
oS << x.digitList[i];
}
return oS;
}
istream& operator>> (istream& is, MyInt& x)
{
char c;
x.currentSize = 0;
x.maxSize = 5;
c = is.peek();
while(!isdigit(c))
{
is.ignore();
c = is.peek();
}
while(isdigit(c))
{
c =is.get();
x.digitList[x.currentSize] = C2I(c);
x.currentSize++;
c = is.peek();
if(x.currentSize >= x.maxSize)
x.Grow();
}
return is;
}
Здесь вы переводите цифры ASCII в некоторое внутреннее представление:
x.digitList[x.currentSize] = C2I(c);
Но нет перевода в другом направлении, обратно к тексту, когда вы выполняете вывод.
x.digitList
?char
. Он может содержать значения, которые представляют символы. Символами могут быть такие вещи, как'a'
,'X'
,'1'
и т. Д. То, что вы ищете, - это способ распознать, что значение вchar
представляет собой цифру.