С++ Генератор Случайных Чисел Телефона


Я был возиться вокруг С C++ после 3 дней обучения и решил сделать генератор случайных чисел телефоне.

Это код, который я придумал

#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>

using namespace std;
int getrandomdigit();

int main()
{
    srand(time(NULL));
    string input;
    int digit1_1;
    int digit1_2;
    int digit1_3;

    int digit2_1;
    int digit2_2;
    int digit2_3;
    int digit2_4;

    cout << "Enter three digits(area code): ";
    getline(cin, input);
    cout << "\n";
    cout << "\tAvailable numbers in your area.";
    cout << "\n\t******************************";

    cout << "\n\n";

    for(int i = 0; i < 10; ++i)
        cout << "\nPhone number: " << input << "-" << getrandomdigit() << getrandomdigit()
        << getrandomdigit() << "-" << getrandomdigit()
        << getrandomdigit() << getrandomdigit() << getrandomdigit();

    cout<<"\n";
    return 0;

}

int getrandomdigit()
{
    return rand() % 10;
}

Поэтому я считаю, что я понимаю логику, как случайных чисел работает поколение. Но прежде чем я добавил getrandomdigit функция(), я использовал вручную определенными "цифры" Варс в попытке генерировать псевдослучайные числа. Так что мой вопрос остается, почему это происходит, когда вы используете целые числа что числа не генерируются случайным образом. Например, если вы ввели код, его бы просто печатать же 2 приставки в 10 раз, но при использовании функции, это дает вам совершенно случайно ВАР каждый раз, когда счетчик будет работать до 10.

Вот наглядный пример с помощью цифр Варс

Enter three digits(area code): 203

        Available numbers in your area.
        ******************************


Phone number: 203-523-3023
Phone number: 203-523-3023
Phone number: 203-523-3023
Phone number: 203-523-3023
Phone number: 203-523-3023
Phone number: 203-523-3023
Phone number: 203-523-3023
Phone number: 203-523-3023
Phone number: 203-523-3023
Phone number: 203-523-3023

Тогда вот пример использования функции getrandomdigit

Enter three digits(area code): 203

        Available numbers in your area.
        ******************************


Phone number: 203-696-3428
Phone number: 203-832-2940
Phone number: 203-293-9390
Phone number: 203-483-3935
Phone number: 203-616-6955
Phone number: 203-089-8674
Phone number: 203-953-6456
Phone number: 203-516-2123
Phone number: 203-800-7836
Phone number: 203-624-7130


1132
8
задан 24 марта 2018 в 01:03 Источник Поделиться
Комментарии
2 ответа

Вот некоторые замечания, которые могут помочь вам улучшить ваш код.

Не злоупотреблять using namespace std

Положить using namespace std в верхней части каждая программа-это плохая привычка , что вы могли бы сделать хорошо, чтобы избежать.

Ликвидировать неиспользуемые переменные

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

Рекомендуется использовать лучше генератора случайных чисел

Потому что вы используете компилятор, который поддерживает, по крайней мере, в C++11, рекомендуется использовать лучше генератора случайных чисел. В частности, вместо randвы, возможно, захотите взглянуть на std::uniform_real_distribution и друзей в <random> заголовок.

Используйте конкатенацию строк

В main функция включает в себя следующие линии:

std::cout << "\n";
std::cout << "\tAvailable numbers in your area.";
std::cout << "\n\t******************************";
std::cout << "\n\n";

Каждый из них-это отдельный вызов operator<< но они не должны быть. Еще один способ написать, что бы вот так:

std::cout << "\n"
"\tAvailable numbers in your area."
"\n\t******************************"
"\n\n";

Это уменьшает все меню для одного вызова operator<< потому что последовательных строк в C++ (и C, если на то пошло) автоматически объединяются в одну строку с помощью компилятора.

Рассмотреть вопрос об улучшении имена

Переменная input не очень описательные. Возможно areaCode было бы лучше имя.

Добавить проверку ошибок

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

Использовать объектную ориентацию

Потому что вы пишете на C++, имело бы смысл есть класс таких, как PhoneNumber для инкапсуляции деталей реализации. Возможно, вы еще не узнали об объектах и классах, но они одно из основных преимуществ C++ и то, что вы должны только учиться, если вы этого еще не сделали. Используйте объекты, где они имеют смысл.

Разобраться в проблеме домена

В США и Канаде (которая, по форматирование телефона, кажется, где это предназначено, чтобы использоваться), телефоны создаются в соответствии с североамериканским планом нумерации. В этом плане, вторая группировка чисел называется, что центральный офис код. Это трехзначное число должно начинаться с цифры в диапазоне от 2 до 9 и не может начинаться с 0 или 1. Ваша текущая программа не подчиняться этой схеме и формирует неверные цифры.

14
ответ дан 24 марта 2018 в 04:03 Источник Поделиться

Не использовать using namespace std

Это плохая привычка, даже для небольших программ. Просто не делай этого.

Не использовать rand()

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

Смешанная

Вам не нужно return 0 в main как компилятор создаст его автоматически.

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

Как вы инициализировать генератор случайных чисел с time означает быструю последующие вызовы даст тот же результат.

8
ответ дан 24 марта 2018 в 03:03 Источник Поделиться