Hi all!

This program seems to get stuck in an infinite loop anytime someone enters an octal number and then tries to display it as a a hexadecimal one... I've been scratching my head for hours-- could anyone give me a hand in figuring out why this is happening?

Code:
#include <iostream>
#include <string>
#include <cstdlib>
#include <cmath>

using namespace std;

class number
{
    private:
        int value;
    public:
        int returnnumber();
        void enternumber(int enter);
};

int number::returnnumber()
{
    return value;
}

void number::enternumber(int enter)
{
    value = enter;
}

class hexa
{
public:
    int input();
    void displayhex(int disp);
};

int hexa::input()
{
    int num;
    cout << "Enter a hex number: ";
    cin >> hex >> num;
    return num;
}

void hexa::displayhex(int disp)
{
    cout << "Hex: " << hex << disp << endl;
}

class octal
{
public:
    int input();
    void displayoct(int disp);
};

int octal::input()
{
    int num;
    cout << "Enter an octal number: ";
    cin >> oct >> num;
    return num;
}

void octal::displayoct(int disp)
{
    cout << "Oct: " << oct << disp << endl;
}

class binary
{
public:
    int input();
    void displaybin(int dec);
};

int binary::input()
{
    int a=0;
    int b=0;
    int c;
    int power;
    int dec=0;
    char str[100];
    for (a=0;a<100;a++)
    {
        str[a] = '\0';
    }
    fflush(stdin);
    cout << "Enter binary number: ";
    cin.getline(str, 100);
    while (str[b] != '\0')
    {
        b++;
    }
    b -= 1;
    for (a=0;a<=b;a++)
    {
        power = b - a;
        if (str[a] == '1')
        {
            dec += pow(2, power);
        }
    }
    return dec;
}

void binary::displaybin(int dec)
{
    char str[1000];
    int a=0;
    for (a;a<1000;a++)
    {
        str[a] = '\0';
    }
    a=0;
    while (dec != 0)
    {
        if (dec % 2 == 1)
        {
            str[a] = '1';
        }
        else
        {
            str[a] = '0';
        }
        dec = dec / 2;
        a++;
    }
    cout << "Binary: ";
    for (a;a>=0;a--)
    {
        cout << str[a];
    }
    cout << endl;
}




int main()
{
    number num;
    binary bino;
    hexa hexer;
    octal octa;
    int choice=0;
    int decnumber;
    while (choice != 9)
    {
        cout << choice << endl;
        cout << "Menu:" << endl 
            << "1) Enter binary number" << endl
            << "2) Enter octal number" << endl
            << "3) Enter decimal number" << endl
            << "4) Enter hexadecimal number" << endl
            << "5) Display number in binary" << endl
            << "6) Display number in octal" << endl
            << "7) Display number in decimal" << endl
            << "8) Display number in hexadecimal" << endl
            << "9) Exit Program" << endl
            << "Choice: ";
        cin >> choice;
        switch (choice)
        {
        case (1):
            {
                num.enternumber((bino.input()));
                continue;
            }
        case (2):
            {
                num.enternumber(octa.input());
                continue;
            }
        case (3):
            {
                fflush(stdin);
                cout << endl << "Enter a decimal number: ";
                cin >> dec >> decnumber;
                num.enternumber(decnumber);
                continue;
            }
        case (4):
            {
                num.enternumber(hexer.input());
                continue;
            }
        case (5):
            {
                bino.displaybin(num.returnnumber());
                continue;
            }
        case (6):
            {
                octa.displayoct(num.returnnumber());
                continue;
            }
        case (7):
            {
                cout << "Decimal: " << dec << num.returnnumber();
                continue;
            }
        case (8):
            {
                hexer.displayhex(num.returnnumber());
                continue;
            }
        }
    }
return 0;
}