I'm trying to figure out a code that will change numbers to romans: for example, the user enter a number a at it will display "your number is I. This to be done from 1 to 10. This is what I got, but there's a problem , whem It runs it always displays all the roman numbers:
#includevoid main()
{
char letters [5][10] = {"I""V""X"};
int num;
cout<< "Enter number from 1 to 10: "<<"
";
cin>> num;
cout<<"your roman number is:"<<"
";
if (num = '1') cout <<letters [0][0] << endl;
if (num = '2') cout <<letters [0][0] << letters [0][0]<<endl;
if (num = '3') cout <<letters [0][0] << letters [0][0]<< letters [0][0]<<endl;
if (num = '4') cout <<letters [0][0] << letters [0][1]<<endl;
if (num = '5') cout <<letters [0][1] <<endl;
if (num = '6') cout <<letters [0][1] << letters [0][0]<<endl;
if (num = '7') cout <<letters [0][1] << letters [0][0]<<letters [0][0]<<endl;
if (num = '8') cout <<letters [0][1] << letters [0][0]<< letters [0][0]<<letters [0][0]<<endl;
if (num = '9') cout <<letters [0][0] << letters [0][2]<<endl;
if (num = '10') cout <<letters [0][2] <<endl;
}
Comments
:
: #include
:
: void main()
: {
: char letters [5][10] = {"I""V""X"};
: int num;
:
: cout<< "Enter number from 1 to 10: "<<"
";
:
: cin>> num;
:
: cout<<"your roman number is:"<<"
";
:
: if (num = '1') cout <<letters [0][0] << endl;
: if (num = '2') cout <<letters [0][0] << letters [0][0]<<endl;
: if (num = '3') cout <<letters [0][0] << letters [0][0]<< letters [0][0]<<endl;
:
: if (num = '4') cout <<letters [0][0] << letters [0][1]<<endl;
: if (num = '5') cout <<letters [0][1] <<endl;
: if (num = '6') cout <<letters [0][1] << letters [0][0]<<endl;
: if (num = '7') cout <<letters [0][1] << letters [0][0]<<letters [0][0]<<endl;
: if (num = '8') cout <<letters [0][1] << letters [0][0]<< letters [0][0]<<letters [0][0]<<endl;
: if (num = '9') cout <<letters [0][0] << letters [0][2]<<endl;
: if (num = '10') cout <<letters [0][2] <<endl;
:
: }
:
This is the classic C equality error. The primary problem is in your tests for equality (if (num = '4')....). When you use the single equal sign (=) you do an assignment operation. If the assignment succeeds, it returns 1 which is equivalent to true, so the test passes and the body of the statement is executed. What you want to do is use the double equal sign (==) to do a test for equivalence. An easy way to avoid this problem in the future is to put the constant value on the left side of the equation ('1' == num). That way if you leave the second equal sign out, the compiler will complain (since it cannot assign the value of a variable to a constant).
Another thing - you are inputting num as an int, but testing it's value against a char ('1') - the tests will never pass. Remove the "'"s from the tests also.