Создание цикла в C ++ (все еще учится) - PullRequest
0 голосов
/ 07 декабря 2018

новенький, пытаюсь понять, как повторить мою программу.Мне нужно понять, как вставить цикл, я думаю, что цикл «делать пока» будет работать для этого, но я не уверен, потому что я пробовал несколько мест вставки и не могу заставить его работать правильно.

Так что моя программа - это телефонная программа, я уверен, что все здесь делали это в школе, я учусь делать это, и это та часть, в которой я запутался.Мой код ниже.

Мне просто нужно, чтобы пользователь мог снова и снова вводить телефонные номера.

Мне кажется, что я должен вставить "do" перед строкой 14 для (counter = 0 ... Затем вставьте часть "while" в строку 94 между скобками. По какой-то причине это не такработать на меня, и я сейчас в тупике.

ПРИМЕЧАНИЕ Это задание для школы, поэтому, пожалуйста, объясните мне, а не просто покажите мне. Спасибо за помощь всем.

#include <iostream> 

using namespace std; 


int main() {

    int counter;

    char phoneNumber;

    cout << "\nEnter a phone number in letters only." << endl;

    for (counter = 0; 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; // keypad starts with 2 for letters ABC, abc
                    break;
                case 'D':
                case 'd':
                case 'E':
                case 'e':
                case 'F':
                case 'f':
                    cout << 3; //for letter DEF, def
                    break;
                case 'G':
                case 'g':
                case 'H':
                case 'h':
                case 'I':
                case 'i':
                    cout << 4; //for letters GHI, ghi
                    break;
                case 'J':
                case 'j':
                case 'K':
                case 'k':
                case 'L':
                case 'l':
                    cout << 5; //for letter JKL, jkl
                    break;
                case 'M':
                case 'm':
                case 'N':
                case 'n':
                case 'O':
                case 'o':
                    cout << 6; //for letters MNO, mno
                    break;
                case 'P':
                case 'p':
                case 'Q':
                case 'q':
                case 'R':
                case 'r':
                case 'S':
                case 's':
                    cout << 7; //for letters PQRS, pqrs
                    break;
                case 'T':
                case 't':
                case 'U':
                case 'u':
                case 'V':
                case 'v':
                    cout << 8; //for letters TUV, tuv
                    break;
                case 'W':
                case 'w':
                case 'X':
                case 'x':
                case 'Y':
                case 'y':
                case 'Z':
                case 'z':
                    cout << 9; //for letters WXYZ, wxyz
                    break;
            }

    }
    return 0;
}

Ответы [ 4 ]

0 голосов
/ 07 декабря 2018

Вы можете иметь любое условие в цикле for, включая вообще ничего , которое рассматривается как true.

for(;;) {
    // code
}

такое же, как

while (true) {
    // code
}

- это то же самое, что и

do {
    // code
} while (true)

Похоже, вы перепутали расположение скобок при попытке do { ... } while (true).Возможно, вы захотите переместить свой большой переключатель в функцию, чтобы было более очевидно, с какой областью видится конкретный }.

#include <iostream> 

int phone_key(char key)
{
    switch (key)
    {
    case 'A':
    case 'a':
    case 'B':
    case 'b':
    case 'C':
    case 'c':
        return 2;
    case 'D':
    case 'd':
    case 'E':
    case 'e':
    case 'F':
    case 'f':
        return 3; 
    case 'G':
    case 'g':
    case 'H':
    case 'h':
    case 'I':
    case 'i':
        return 4; 
    case 'J':
    case 'j':
    case 'K':
    case 'k':
    case 'L':
    case 'l':
        return 5; 
    case 'M':
    case 'm':
    case 'N':
    case 'n':
    case 'O':
    case 'o':
        return 6; 
    case 'P':
    case 'p':
    case 'Q':
    case 'q':
    case 'R':
    case 'r':
    case 'S':
    case 's':
        return 7;
    case 'T':
    case 't':
    case 'U':
    case 'u':
    case 'V':
    case 'v':
        return 8; 
    case 'W':
    case 'w':
    case 'X':
    case 'x':
    case 'Y':
    case 'y':
    case 'Z':
    case 'z':
        return 9; 
    }

    return 0;
}

int main() {
    for (;;)
    {
        std::cout << "\nEnter a phone number in letters only." << std::endl;

        for (int counter = 0; counter < 7; counter++)
        {
            char phoneNumber;
            cin >> phoneNumber;

            if (counter == 3)
                std::cout << "-";
            std::cout << phone_key(phoneNumber);
        }
    }
}
0 голосов
/ 07 декабря 2018
do {
    //your code here;
} while (1);

Это будет повторяться бесконечно, что не является хорошей практикой.

int number_of_phones = 10; // total number of phones you want
int i = 0;
do {
    //your code here;
    i=i+1;
} while (i<number_of_phones);

Это заставит его работать 10 раз, например

0 голосов
/ 07 декабря 2018

Как уже сказал pb772, бесконечный цикл типа

do {// Материал, который вы хотели бы сделать}, в то время как (1);

будетхорошо, тем более что это школьное задание, но не идеальное, как всегда заявляет pb772.Я видел советы циклически завершать конечное число раз и затем выходить, но вместо этого я бы сделал что-то вроде специального символа, например ' # ' или '! ', который вызовет условиевыйти из цикла.Я бы увидел это как выход / побег.В конце концов, это зависит от вас, если вы хотите, вы можете сделать что-нибудь, и то, что я предлагаю, это просто идея, чтобы вдохновить вас.Например, другая идея: если вы хотите углубиться, подождите, пока другой ввод не определит, какое действие нужно выполнить, вы запускаете «командную консоль» с помощью «! » и затем набираете «* 1013».* q 'для выхода или также сначала прочитать символы в строку, чтобы вы могли выполнять сложные «команды», такие как «! q ».

Вот простая версия:

bool loop_condition = true;
do
{
   if(input == '!')
   {
      loop_condition = false;
   }
   else
   {
      //Stuff you'd like to do if the read character is not !
   }while(loop_condition == true);

Просто для обеспечения контекста вот что происходит:

  1. Я объявляю переменную с именем loop_condition
  2. Внутри цикла я проверяю, является ли напечатанный символ!
  3. Если это так, установите переменную loop_condition в false с последующим выходом из цикла
  4. В противном случае просто выполните свой код и цикл

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

0 голосов
/ 07 декабря 2018

Я предлагаю обернуть цикл for (counter=0... блоком while (!cin.eof()) {.Это позволит пользователю продолжать вводить символы, вплоть до символа EOF (например, ctrl-D).

Возможно, вы захотите выводить новую строку после каждого 7-го символа, чтобы дисплей выглядел хорошо.

...