Создание матрицы случайно сгенерированных символов - PullRequest
0 голосов
/ 06 декабря 2018

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

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_SIZE_STRING 20

int main() {



    int number_arr_rows= 5;
    int i , j;
    int min_size_string= 4;
    float probability;
    int *arr_string_lenght = (int*)malloc(number_arr_rows*sizeof(int));
    for(i = 0 ; i < number_arr_rows ; i++){
        arr_string_lenght[i]= min_size_string + rand() % ( MAX_SIZE_STRING - min_size_string + 1);
    }


    char **created_string_arr = (char**)malloc(number_arr_rows * sizeof(*created_string_arr));
    for( i = 0 ; i < number_arr_rows ; i++){
        created_string_arr[i] = (char*)malloc(arr_string_lenght[i]*sizeof(created_string_arr));
    }


// generating characters [A-Z][a-z] randomly. 50% probability.
    for(i= 0 ; i < number_arr_rows ; i++){
        for(j = 0 ; j < arr_string_lenght[j] ; j++){
            probability = (float)((rand() % 101) / 100);
            if(probability <= 0.5){
            created_string_arr[i][j]= (char)(65 + rand() %26);
        }

            else{
            created_string_arr[i][j] = (char)(97 +rand() %26);

        }
    } 
}

    for(i = 0 ; i < number_arr_rows ; i++){
        for( j = 0 ; j < arr_string_lenght[i] ; j++){
            printf("%s\n" , created_string_arr[i]);
        }
    }
return 0;   
}

Ответы [ 2 ]

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

В дополнение к ответу Криса:

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

time_t t;
srand((unsigned) time(&t));

до всех случаев использования rand().Также вы (почти) всегда будете генерировать значения в верхнем регистре, потому что выражение

probability = (float)((rand() % 101) / 100);

будет оцениваться в 0 почти каждый раз.Вместо этого вы должны использовать:

probability = ((float)(rand() % 101)) / 100.0;
0 голосов
/ 06 декабря 2018

Первая очевидная проблема заключается в следующих строках:

for(i= 0 ; i < number_arr_rows ; i++){
    for(j = 0 ; j < arr_string_lenght[j] ; j++){

Вы используете j для индексации в arr_string_lenght внутри цикла j ... которое должно быть i

Во-вторых, вы не NUL завершаете свои строки, поэтому вы не можете сделать это:

printf("%s\n" , created_string_arr[i]);

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

for(i = 0 ; i < number_arr_rows ; i++) {
    for( j = 0 ; j < arr_string_lenght[i] ; j++) {
        printf("%c" , created_string_arr[i][j]);
    }
    printf("\n");
}

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

...