c - 尝试用 C 语言编写一个程序,用随机数填充数组

标签 c random

我的问题是,每次我尝试时都会遇到段错误(核心转储),我还没有清理我的代码,但我被难住了。

我必须使用编译器输入值,例如“./filename 0 100”,其中 0 是最小值,100 是最大值。

然后它必须用随机数 (0-100) 填充 10 个元素的数组。我太接近了,只是无法理解主要功能。

另外,如何以“[0,1,2,3]”格式(包括逗号)打印数组 {0,1,2,3},而不使其看起来像“[0,1,2,3” ,]"

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

int getRandom(int min, int max);  
void fillArray(int data[], int size, int min, int max); 
void printArray(int data[], int size);

int main(int argc, char *argv[]) {
    int a;   
    int b;
    if (argc>=3){
        a = atoi(argv[1]);
        b = atoi(argv[2]);
        int arr[10];
        printf("\t An array with random values from 0 to 100 \n");
        fillArray(arr,10 ,a, b);
        printArray(arr, 10);
    } else {
        printf("Incorrect number of arguments - please call with assignment min max\n");
    }
    return 0; 
}

int getRandom(int min, int max) {
   int result = 0;   
   int low = 0;   
   int high = 0;
   if (min<max) {
       low = min;
       high = max+1;    
   } else {     
       low = max + 1;   
       high = min;  
   }

   result = (rand() % (high-low)) + low; 
   return result;
}

void fillArray(int data[], int size, int min, int max){
   int i;
   for(i=min ; i < max+1; i++){
       data[i] = getRandom(min,max);
   }
}

void printArray(int data[], int size){
    int i;
    printf("[");
    for(i=0; i<size; i++){
        printf("%d,", data[i]);
    }
    printf("]");
}

最佳答案

我同意@Steve Friedl的观点,即你的程序的主要问题在于fillArray函数。 i 应该从 0 运行到 size

至于你的第二个问题,测试是否打印最后一个数字有助于抑制不需要的逗号:

void printArray(int data[], int size) {
    printf("[");   
    for (int i = 0; i < size; i++) {
        printf("%d", data[i]);
        if (i < size - 1)
            printf(",");
    }   
    printf("]");
}

如果您更喜欢更紧凑的解决方案(尽管使用优化编译器并没有真正的区别),您可以将其编写为:

void printArray(int data[], int size) {
    printf("[");   
    for (int i = 0; i < size; i++) {
        printf("%d%c", data[i], i < size-1 ? ',' : ']');
    }
}

此外,在主函数中,您应该在打印中包含 ab:

printf("\t An array with random values from %d to %d \n", a, b);

关于c - 尝试用 C 语言编写一个程序,用随机数填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58684582/

相关文章:

c - 在 c 中的 fork 进程上生成随机数

c++ - 生成随机数并保证覆盖给定域之间的所有内容?

c - 如何计算 C 中的 argc

c - 多个子进程将使用 popen 执行的 unix 命令的结果写入父进程

c - 估计代码在本地linux系统上的执行时间

c++ - 错误 [Pe513] : a value of type "void *" cannot be assigned to an entity of type "uint8_t *"

c++ - 在 C++ 中生成相同的随机数

sqlite - webkit 中的 sqlite 是否支持 RANDOM() 函数?

基于 css 的页面中的 Javascript 随机图像生成器

c - 高科技C编译器: #define: "taking the address of this object is illegal"