C ++: как остановить цикл с помощью слова, такого как «выход» - PullRequest
0 голосов
/ 26 февраля 2019

Итак, у меня есть задание на кодирование, и у меня возникают проблемы с его завершением.Точные инструкции таковы:

Чтобы упростить запоминание телефонных номеров, некоторые компании используют буквы для отображения своего телефонного номера.Например, используя буквы, телефонный номер 438-5626 может быть показан как ПОЛУЧИТЬ КРЕДИТ.В некоторых случаях, чтобы сделать телефонный номер значимым, компании могут использовать более семи букв.Например, 225-5466 может отображаться как CALL HOME, который использует восемь букв.

Напишите программу, которая выполняет следующие действия:

  • Предлагает пользователю ввести Y или y дляначать преобразование или любой другой ввод для выхода.
  • Предлагает пользователю ввести номер телефона, выраженный буквами, и выводит соответствующий номер телефона цифрами
  • Обрабатывает только первые семь букв, если пользовательвводит более семи букв.
  • Выводит - (дефис) после третьей цифры.
  • Позволяет пользователю использовать как прописные, так и строчные буквы, а также пробелы между словами.
  • Обрабатывать столько телефонных номеров, сколько хочет пользователь, и разрешать ему выходить после каждого преобразования.

В настоящее время я выполнил все шаги, кроме последнего (вида).

Инструктор ищет слово «выход» для выхода из программы.В настоящее время он настроен на «%» для завершения программы.Логично сказать, что вы просто изменили «%» на «выход» и пошли дальше, но я получаю сообщение об ошибке.

#include <iostream>
using namespace std;

int main()
{

    int counter;

    char phoneNumber;
    char cont;

//  Prompts a user to enter Y or y to begin conversion, or any other input to quit. 
    cout << "Please enter 'Y' or 'y' to continue, otherwise the program with quit.\n Input: ";
    cin >> cont;
    if (cont == 'y' || cont == 'Y')
    {

        // statement(s) will execute if the boolean expression is true
    }
    else
    {
        return 0;
        // statement(s) will execute if the boolean expression is false
    }

    cout << "To stop this program enter 'exit'." << endl;
    cout << "Enter a phone number in letters only \nNOTE: Must enter 7 or more letters: ";
    cin >> phoneNumber;
    cout << endl;
    phoneNumber = static_cast<char>(toupper(phoneNumber));
    while (phoneNumber != '%')
    {
        cout << "\nTo stop this program enter 'exit'." << endl;
        cout << "Enter a phone number in letters only." << endl;

        for (counter = 0; phoneNumber != '%' && counter < 7; counter++)
        {
            cin >> phoneNumber;

            if (counter == 3)
                cout << "-";

            if ((phoneNumber >= 'A' && phoneNumber <= 'Z') || 
                (phoneNumber >= 'a' && phoneNumber <= 'z'))
                switch (phoneNumber)
                {
                    case 'A':
                    case 'a':
                    case 'B':
                    case 'b':
                    case 'C':
                    case 'c':
                        cout << 2;
                        break;
                    case 'D':
                    case 'd':
                    case 'E':
                    case 'e':
                    case 'F':
                    case 'f':
                        cout << 3;
                        break;
                    case 'G':
                    case 'g':
                    case 'H':
                    case 'h':
                    case 'I':
                    case 'i':
                        cout << 4;
                        break;

                    case 'J':
                    case 'j':
                    case 'K':
                    case 'k':
                    case 'L':
                    case 'l':
                        cout << 5;
                        break;
                    case 'M':
                    case 'm':
                    case 'N':
                    case 'n':
                    case 'O':
                    case 'o':
                        cout << 6;
                        break;
                    case 'P':
                    case 'p':
                    case 'Q':
                    case 'q':
                    case 'R':
                    case 'r':
                    case 'S':
                    case 's':
                        cout << 7;
                        break;

                    case 'T':
                    case 't':
                    case 'U':
                    case 'u':
                    case 'V':
                    case 'v':
                        cout << 8;
                        break;

                    case 'W':
                    case 'w':
                    case 'X':
                    case 'x':
                    case 'Y':
                    case 'y':
                    case 'Z':
                    case 'z':
                        cout << 9;
                        break;
                }
        }
        while (cin.get() != '\n')
            ;
    }
    return 0;
}

Я думаю, что это как-то связано с символом, иэто все, что я мог узнать.Я искал ответ в интернете, но я пришел пустым.Буду очень признателен за любую помощь.

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

В C ++ существует большая разница между символом и строкой.Символ - это один символ, а строка - это набор символов.Для строк связка может означать 0, 1 или более символов.Двойки различаются с помощью апострофа (для символа) или кавычек (для строки).Поскольку ваша программа использует только символ в качестве ввода, когда вы получаете ввод длиннее, чем один символ, ваша программа не знает, как с этим справиться.Вам нужно будет использовать строки для включения случая, когда вам нужно написать «выход».

0 голосов
/ 26 февраля 2019

Основная структура вашей программы должна быть:

int main() {
    std::string line;

    while (std::getline(std::cin, line) && line != "exit") {
        std::cout << phone_digits(line) << "\n";
    }
}

Это почти так же просто, как и получается.Условие «выхода» не является строго обязательным, поскольку существует широко распространенное соглашение о том, как сигнализировать об окончании ввода.В Windows это Ctrl + Z, в то время как в UNIX-подобных системах (Linux, NetBSD, macOS) это Ctrl + D.

Я также не понимаю, почему вы сначала вводите 'y', чтобы фактически запуститьпрограмма.Это тоже не нужно, но ваш учитель, вероятно, будет настаивать на этом, тем не менее.

Следующим шагом будет написать функцию phone_digits и поместить ее выше основной функции.Эта функция принимает строку в качестве аргумента, а также возвращает строку.

std::string phone_digits(const std::string &input) {
    std::string result;

    // TODO: convert letters from input to digits in output
    // TODO: insert the hyphen in the result

    return result;
}

Чтобы написать функцию в этой форме, вы должны прочитать документацию класса std::string, чтобы узнать, как выполнить циклдля всех символов из ввода и как добавить символы в конец строки результата.

0 голосов
/ 26 февраля 2019

Если вы хотите изменить переменную phonenumber на «exit», она должна быть строкой, а не символом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...