Добавление кода города в программу

0

В принципе, я получил эту программу для одного задания. Он запрашивает любые телефонные номера длиной 7 цифр, такие как 930-1892. то он будет указывать ваши цифры как выходные. Теперь я решил, что я бы предпочел добавить код области к 7 цифрам, общей длиной до 10 цифр. Я хочу, чтобы он выводился в формате (505) 123-4567.

Я удивительно боюсь с этим, я не могу заставить программу выводить 10 цифр, включая код области, а не только 7 цифр. Но программа как сейчас должна компилировать и запускать и выводить 7-значный номер телефона, который вы добавили.

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

/* Global Variables */
int prefix[3];
int number[4];
string phoneNumber;

// main routine
int main()
{
  // local variables
  int input_done = 0; // flag to control input loop
  int ascii_0 = 48;
  int i = 0;

  while (input_done == 0)
  {
    // Ask the user for input
    cout << "Please enter your 7 digit phone number (for example: 123-4567)" << endl;
    getline(cin, phoneNumber);

    // split up the input and check it for validity
    if (phoneNumber.length()==8)
    {
      input_done = 1;  // assume number is correct until otherwise

      for (i = 0; i <= 7; i++)
      {
        if (i == 3)
        {
          if (phoneNumber[3] != '-')
            input_done = 0;
        }
        else
        {
          if ( (phoneNumber[i] < '0') || (phoneNumber[i] > '9') )
            input_done = 0;
        }
      }

      // assign values to individual array elements if checked out okay
      if (input_done == 1)
      {
        for (i = 0; i <= 2; i++)
        {
          prefix[i] = phoneNumber[i] - ascii_0;
          number[i] = phoneNumber[i+4] - ascii_0;
        }
        number[3] = phoneNumber[7] - ascii_0;
     }
    }

    if (input_done != 1)
      cout << "There is a problem with what you entered, please try again.\n";

  }

  // report
  cout << "I have your phone number as: ";

  for (i = 0; i<3; i++)
    cout << prefix[i];
  cout << "-";
  for (i = 0; i<4; i++)
    cout << number[i];
  cout << endl;

  return 0;
}
  • 0
    Какой у Вас вопрос? Что не работает и как?
  • 0
    Сам по себе работает нормально, но я хотел добавить код города. На данный момент он выводит только 7-значный номер телефона, например 123-4567. Но я хотел, чтобы он выводил 10 цифр, как (505) 123-4567. Но я не могу заставить это сделать это, не испортив программу
Показать ещё 1 комментарий
Теги:
arrays
phone-number

1 ответ

1
Лучший ответ

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

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

// main routine
int main()
{
    // local variables
    bool isValidNumber = false;
    string phoneNumber;

    while (isValidNumber == false)
    {
        // Ask the user for input
        cout << "Please enter your 10 digit phone number (i.e. 900-976-8008)" << endl;
        std::getline(cin, phoneNumber);

        isValidNumber = true;

        //  Validate and clean up the phone number
        for (std::string::iterator it = phoneNumber.begin(); it != phoneNumber.end();)
        {
            //  Check for characters we want to ignore
            if (*it == '(' || *it == ')' || *it == '-' || *it == ' ')
            {
                it = phoneNumber.erase(it);
            }
            //  Check for numbers since we really want to keep them
            else if (*it >= '0' || *it <= '9')
            {
                ++it;
            }
            //  Check characters that are considered invalid
            else
            {
                isValidNumber = false;
            }
        }

        //  Make sure the number of required digits are present. Add an additional
        //  check for numbers without area codes if you like.
        if (phoneNumber.size() != 10)
        {
            isValidNumber = false;
        }

        if (isValidNumber == false)
        {
            cout << "There is a problem with what you entered, please try again.\n";
        }
    }


    //  Split the number and print it
    std::string areacode;
    std::string prefix;
    std::string number;

    areacode = phoneNumber.substr(0, 3);
    prefix = phoneNumber.substr(3, 3);
    number = phoneNumber.substr(7, 4);

    std::cout
        << "I have your phone number as: ("
        << areacode
        << ") "
        << prefix
        << '-'
        << number
        << '\n';

    return 0;
}

Я также рекомендую, чтобы вы не размещали using namespace std операторов using namespace std пространства имен в области пространства имен. Это просто плохая форма и может привести к конфликтам имен.

  • 0
    Аааа, я понимаю, хорошо, теперь я понимаю. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню