Kenny I.
Kenny I.

Reputation: 1

Reading digits and converting to words

I'm new to c++ and I have to write a program that takes a user 4-digit number and convert it to words i.e. 7238 would be wrote as seven two three eight. Yet it writes every number as unknown. Any advice for a noob would be greatly appreciated.

#include iostream

using namespace std;

int main() {


     char number;


    cout << "Please enter a 4 digit number: ";

     cin >> number;

        switch(number){

        case 1 :
            cout<< "one"; 
            break;
        case 2 :
            cout<< "two";
            break;
        case 3 :
            cout<< "three";
            break;
        case 4 :
            cout<< "four";
            break;
        case 5 :
            cout<< "five";
            break;
        case 6 :
            cout<< "six";
            break;
        case 7 :
            cout<< "seven";
            break;
        case 8 :
            cout<< "eight";
            break;
        case 9 :
            cout<< "nine";
            break;
        case 0 :
            cout<< "zero";
            break;

        default :
            cout << "UNKNOWN.";
   }

}

Upvotes: 0

Views: 97

Answers (4)

mac
mac

Reputation: 81

With to_string and range based for:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int number;
    cout << "Enter the number: ";
    cin >> number;

    string strnum = to_string(number);
    for (auto c : strnum)
    {
        switch (c)
        {
            case '0': cout << "zero "; break;
            case '1': cout << "one "; break;
            case '2': cout << "two "; break;
            case '3': cout << "three "; break;
            case '4': cout << "four "; break;
            case '5': cout << "five "; break;
            case '6': cout << "six "; break;
            case '7': cout << "seven "; break;
            case '8': cout << "eight "; break;
            case '9': cout << "nine "; break;
            default: cout << "non-digit"; break;
        }
    }
    return 0;
}

Upvotes: 1

Steven B.
Steven B.

Reputation: 9362

Sounds like homework but here are some tips. Change your number variable to type of int You can break the number out into individual variables with division and modulus. I would stuff those into an integer array.

int array[4];
arr[0] = (number / 1000) % 10;  // Thousands
.......                         // You do the hundreds and tens
arr[3] = (number % 10);         // Ones

Then use a loop around your switch statement where your counter is less than 4 (the length of the array). Make sure to increase your counter at the end of each loop. Oh, and it's #include <iostream>.

Upvotes: 1

Greg Kikola
Greg Kikola

Reputation: 573

Your variable is of type char. A char stores a character, usually ASCII encoded. If the user inputs a '1', for example, that would usually translate to an integer value of 49, not 1. Either read into an int or change your case labels to use character literals:

case '1':
    cout << "one";
    break;

You could then use a loop to read multiple digits.

Upvotes: 0

london-deveoper
london-deveoper

Reputation: 543

You need to put ascii values in your case statements. Currently you are comparing the ascii values for digits with numbers 0 - 9. Values can be found here : http://www.asciitable.com/

Upvotes: 0

Related Questions