генерация случайных символов в C ++ для каждого из трех запросов имени - PullRequest
0 голосов
/ 01 марта 2019

Эта программа предлагает пользователю ввести имя.Затем он будет использовать два цикла while.Один цикл while для генерации 3 случайных букв, за которым следует тире, а затем еще один цикл while для генерации 3 случайных цифр.Я могу заставить программу сделать это три раза по мере необходимости.

Проблема в том, что он генерирует три одинаковых случайных числа и буквы для каждого из трех введенных имен.Я хотел бы, чтобы каждое введенное имя печатало уникальный набор букв и цифр.Это что-то с функцией srand ()?

Существует также проблема добавления тире после печати символов после ввода второго имени и двух тире после печати символов для третьего введенного имени.

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

int main() {
    int nameCount = 0;          // Hold the number of names entered by user
    string randomID;            // Used to concatenate the random ID for 3 names
    string name;                // To hold the 3 names entered by the user
    int numberOfCharacters = 0;
    int numberOfNumbers = 0;
    int a;
    srand(time(NULL));
    while(nameCount < 3) {
        cout << "\nEnter a name: ";
        getline(cin, name);
        while (numberOfCharacters < 3) {
            randomID += static_cast<int>('a') + rand() % 
                (static_cast<int>('z') - static_cast<int>('a') + 1);
            numberOfCharacters++;
        }
        randomID += "-";
        while (numberOfNumbers < 3) {
            randomID += static_cast<int>('1') + rand() %
                (static_cast<int>('1') - static_cast<int>('9') + 1);
            numberOfNumbers++;
        }
        cout << randomID;
        nameCount++;
    }
    return 0;
}

1 Ответ

0 голосов
/ 01 марта 2019

Вы делаете randomID пустым, устанавливаете numberOfCharacters в ноль и устанавливаете numberOfNumbers в ноль только один раз за пределами цикла.Вместо этого сделайте следующее:

int main() {
    int nameCount = 0;          // Hold the number of names entered by user
    string name;                // To hold the 3 names entered by the user
    int a;
    srand(time(NULL));
    while(nameCount < 3) {
        string randomID;            // Used to concatenate the random ID for 3 names
        int numberOfCharacters = 0;
        int numberOfNumbers = 0;
        cout << "\nEnter a name: ";
    ...

Также:

        randomID += static_cast<int>('1') + rand() %
            (static_cast<int>('1') - static_cast<int>('9') + 1);

Я не думаю, что один минус девять - это то, что вы хотите.Попробуйте поменять местами 1 и 9.

...