Перегрузка оператора istream >> не будет работать

0

Мне нужно создать функцию перегрузки оператора 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;

}

  • 0
    Как объявлен x.digitList ?
  • 0
    Для уточнения терминологии: тип данных char . Он может содержать значения, которые представляют символы. Символами могут быть такие вещи, как 'a' , 'X' , '1' и т. Д. То, что вы ищете, - это способ распознать, что значение в char представляет собой цифру.
Теги:

1 ответ

0

Здесь вы переводите цифры ASCII в некоторое внутреннее представление:

x.digitList[x.currentSize] = C2I(c);

Но нет перевода в другом направлении, обратно к тексту, когда вы выполняете вывод.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню