创建随机生成的字符矩阵

时间:2018-12-06 16:00:44

标签: c arrays random char

我正在尝试创建一个由随机生成的字符组成的随机生成的矩阵; 如果有人可以高亮显示我的代码中的错误,我将无法理解。...可能有很多,因为这是我第一次使用这种代码。

我的意思是,它可以编译,但是会打印­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­'-'系列,但是创建的字符应该是字母。

#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 :(得分:2)

第一个明显的问题是在这些行中:

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分配的内存。即使在这样的简单程序中也要这样做,以牢固地养成大型项目的习惯,这是一个好习惯。

答案 1 :(得分:0)

除了克里斯的回答:

您每次都会生成相同的值,因为您没有为随机生成器添加种子。

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

rand()的所有用法之前。 另外,您将(几乎)始终生成大写值,因为表达式

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

几乎每次都会求值为0。相反,您应该使用:

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