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;
}