我的问题是,每次我尝试时都会遇到段错误(核心转储),我还没有清理我的代码,但我被难住了。
我必须使用编译器输入值,例如“./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 ? ',' : ']');
}
}
此外,在主函数中,您应该在打印中包含 a
和 b
:
printf("\t An array with random values from %d to %d \n", a, b);
关于c - 尝试用 C 语言编写一个程序,用随机数填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58684582/