2

I am new to C++ (I am studying for an associates in CompSci) and have been asked to complete this assignment:

Write a program that prompts the user to enter a telephone number expressed in letters and outputs the corresponding telephone number in digits. If the user enters more than seven letters, then process only the first seven letters. Also output the – (hyphen) after the third digit. Allow the user to use both uppercase and lowercase letters as well as spaces between words. Moreover, your program should process as many telephone numbers as the user wants.

Below is my code. I have an issue where it loops, but it does not accept new input and seems to append the same input to the end of the original input. "callnow" outputs "225-5669" then when I input 'y' to enter another number it does not take input and outputs "225-5669225-5669." What might be causing this? I have tried moving the initialization of my variables into the do...while loop so as to effectively clear them and that did not work.

Thanks for any help in advance!

// Project 4
// Telephone Letter to Number Conversion

#include <iostream>
#include <string>

using namespace std;

int main()
{
    // Declare variables
    int x = 0;
    int i = 0;
    string phrase = "";
    string str = "";
    string number = "";
    char tryAgain = 'y';

    do
    {
        // Print directions to user
        cout << "Please enter a 1 to 7 character phrase you "
            << "would like to convert to telephone numbers: " << endl;

        // Input string into variable
        getline(cin, str);

        // Loop to check for spaces
        for (x = 0; x < str.length(); x++)
        {

            if (str[x] != ' ')
                phrase = phrase + str[x];
        }

        // Get individual letters
        for (i = 0; i < 7; i++)
        {
            char letter;
            letter = phrase[i];

            // Convert Uppercase to Lowercase
            if (letter >= 'A' && letter <= 'Z')
            letter = tolower(letter);

            // First 3 
            if (i < 3)
            {
                // Switch statement to convert letter to number
                switch (letter)
                    {
                    case 'a':
                    case 'b':
                    case 'c':
                        number = number + '2';
                        break;
                    case 'd':
                    case 'e':
                    case 'f':
                        number = number + '3';
                        break;
                    case 'g':
                    case 'h':
                    case 'i':
                        number = number + '4';
                        break;
                    case 'j':
                    case 'k':
                    case 'l':
                        number = number + '5';
                        break;
                    case 'm':
                    case 'n':
                    case 'o':
                        number = number + '6';
                        break;
                    case 'p':
                    case 'q':
                    case 'r':
                    case 's':
                        number = number + '7';
                        break;
                    case 't':
                    case 'u':
                    case 'v':
                        number = number + '8';
                        break;
                    case 'w':
                    case 'x':
                    case 'y':
                    case 'z':
                        number = number + '9';
                        break;
                    default:
                        cout << "Not a letter.\n";
                    }
            }

            // Dash
            else if (i == 3)
            {
                number = number + '-';
                // Switch statement to convert letter to number
                switch (letter)
                    {
                    case 'a':
                    case 'b':
                    case 'c':
                        number = number + '2';
                        break;
                    case 'd':
                    case 'e':
                    case 'f':
                        number = number + '3';
                        break;
                    case 'g':
                    case 'h':
                    case 'i':
                        number = number + '4';
                        break;
                    case 'j':
                    case 'k':
                    case 'l':
                        number = number + '5';
                        break;
                    case 'm':
                    case 'n':
                    case 'o':
                        number = number + '6';
                        break;
                    case 'p':
                    case 'q':
                    case 'r':
                    case 's':
                        number = number + '7';
                        break;
                    case 't':
                    case 'u':
                    case 'v':
                        number = number + '8';
                        break;
                    case 'w':
                    case 'x':
                    case 'y':
                    case 'z':
                        number = number + '9';
                        break;
                    default:
                        cout << "Not a letter.\n";
                    }
            }

            // Last 4
            else
            {
                // Switch statement to convert letter to number
                switch (letter)
                    {
                    case 'a':
                    case 'b':
                    case 'c':
                        number = number + '2';
                        break;
                    case 'd':
                    case 'e':
                    case 'f':
                        number = number + '3';
                        break;
                    case 'g':
                    case 'h':
                    case 'i':
                        number = number + '4';
                        break;
                    case 'j':
                    case 'k':
                    case 'l':
                        number = number + '5';
                        break;
                    case 'm':
                    case 'n':
                    case 'o':
                        number = number + '6';
                        break;
                    case 'p':
                    case 'q':
                    case 'r':
                    case 's':
                        number = number + '7';
                        break;
                    case 't':
                    case 'u':
                    case 'v':
                        number = number + '8';
                        break;
                    case 'w':
                    case 'x':
                    case 'y':
                    case 'z':
                        number = number + '9';
                        break;
                    default:
                        cout << "Not a letter.\n";
                    }
            }
        }
            // Output number
            cout << number << endl;

            // Ask if they want to enter another number
            cout << "Would you like to enter another phrase? (y/n) ";
            cin >> tryAgain;
    }
    while (tryAgain != 'n');

    return 0;
}
jps
  • 20,041
  • 15
  • 75
  • 79
TheCanary
  • 21
  • 1
  • The `cin >> tryAgain;` at the very end leaves an Enter key in the input buffer. The next `getline` then treats that as inputtning an empty line. See the duplicate for a solution. – BoP Jul 24 '22 at 16:57

0 Answers0