C ++ Случайный идентификатор и случайные ответы - PullRequest
0 голосов
/ 22 ноября 2018

Я создаю программу, которая выводит идентификатор и случайные угадывания ответов.Вы можете догадаться, A, B, C, D, и идентификатор состоит из случайных символов в первых 2 букв и цифры в следующих 3.

Ошибка в том, что программа дает мне такой идентификатор, какthis: YN420BBBBCBACDBBCDB

В нем четко виден идентификатор.Но он помещает случайный ответ вместе с ним в одну переменную.Вот мой код:

        #include <iostream>
        #include <stdio.h>
        #include <ctime>
        #include <cstdlib>
        #include <string>
        #include <fstream>

        using namespace std;

        char id[6];
        char answers[16];

        int main()
        {
            srand(time(NULL));
            int random =rand() % 500+1;
            const char* const a_to_d       = "ABCD"                       ;
            const char* const a_to_z       = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
            const char* const zero_to_seven = "01234567";

            for (int i = 0; i < random; ++i){
            int ri = rand()  % 26;
            id[0] = a_to_z[ri];
            int ri1 = rand() % 26;
            id[1] = a_to_z[ri1];

            int ri2 = rand() % 7;
            id[2] = zero_to_seven[ri2];
            int ri3 = rand() % 7;
            id[3] = zero_to_seven[ri3];
            int ri4 = rand() % 7;
            id[4] = zero_to_seven[ri4];
            id[6] = 0;
            cout<<id<<"     "<<answers<<endl<<endl;

            int fi   = rand() % 4;
            answers[0]  = a_to_d[fi];
            int fi1  = rand() % 4;
            answers[1]  = a_to_d[fi1];
            int fi2  = rand() % 4;
            answers[2]  = a_to_d[fi2];
            int fi3  = rand() % 4;
            answers[3]  = a_to_d[fi3];
            int fi4  = rand() % 4;
            answers[4]  = a_to_d[fi4];
            int fi5  = rand()  % 4;
            answers[5]  = a_to_d[fi5];
            int fi6  = rand() % 4;
            answers[6]  = a_to_d[fi6];
            int fi7  = rand() % 4;
            answers[7]  = a_to_d[fi7];
            int fi8  = rand() % 4;
            answers[8]  = a_to_d[fi8];
            int fi9  = rand() % 4;
            answers[9]  = a_to_d[fi9];
            int fi10 = rand() % 4;
            answers[10] = a_to_d[fi10];
            int fi11 = rand() % 4;
            answers[11] = a_to_d[fi11];
            int fi12 = rand() % 4;
            answers[12] = a_to_d[fi12];
            int fi13 = rand() % 4;
            answers[13] = a_to_d[fi13];
            int fi14 = rand() % 4;
            answers[14] = a_to_d[fi14];
            answers[16] = 0;
            }

            return 0;
        }

1 Ответ

0 голосов
/ 22 ноября 2018

Ваш массив символов должен заканчиваться нулем.Поскольку его нет, cout продолжается в следующий массив, пока, наконец, не найдет нулевой терминатор.Чтобы это исправить, просто увеличьте длину на один char id[5] и установите последнее значение равным 0 id[4] = 0

. Кроме того, ваши операторы модуля никогда не покроют последнее значение для ri и ri2.rand() % 25 наибольшее значение, которое вы можете получить - 24. Вы действительно хотите rand() % 26.

...