此程序使用rand()创建随机数。用户输入将创建多少随机数作为整数。这个程序也找到了最大的数字。
这是我的代码:

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

  int main(void)
{
  srand(time(NULL));
  int size;
  int i;
  int array[0];

  printf("\nSize of random array: ");
  scanf("%d", &size);

  for (i = 0; i <  size; i++){
    array[i] = rand() % 100 + 1;;
  }

  for (i=0; i < size; i++){
       printf("%d ", array[i]);
      }

 int largest =0;

for (i = 1; i < size; i++)
{
      if (largest < array[i])
              largest = array[i];
      }
printf("\n largest element present in the given array is : %d\n", largest);

    return 0;
}

我正在使用一个在线C编译器。(我使用的是Atom编辑器,但我的代码在里面什么也做不了)。
输出应该如下:
随机数组大小:6
0 6 10 21个
给定数组中的最大元素是:21
但我明白了:
随机数组大小:6
0 6 0 0-433525051 32757
给定数组中存在的最大元素是:32757
为什么我得到这么大的数字?我该怎么解决?

最佳答案

对于C,要么在开始时静态分配内存,要么使用malloc/calloc动态分配内存(还有一些其他方法)。因为您正在读取用户的大小数组,所以动态内存分配可能是一种方法。动态分配内存需要记住一些事情。您总是要检查分配是否成功并释放内存。您可以在这里阅读更多内容:https://www.tutorialspoint.com/c_standard_library/c_function_malloc.htm
使用OP示例代码的示例解决方案:

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

int main(void) {

srand(time(NULL));
int size = 0;
int i;
int largest;
// You must declare a pointer to allocate space on the heap
int *array;

// Loop until user enters a valid size
while (size <= 0) {

    printf("\nPlease enter the size of random array: ");
    scanf("%d", &size);

    if (size <= 0)
      printf("Please enter a number above 0.");

}

// Set the size as your input size
array = malloc(sizeof(int) * size);

// Always check if your memory allocation was successful...
// Probably better ways to handle than to simply exit out
if(array == NULL) {

    printf("malloc of size %d failed!\n", size);
    exit(1);

}

for (i = 0; i <  size; i++) {

  array[i] = rand() % 100 + 1;;

}

for (i = 0; i < size; i++) {

  printf("%d ", array[i]);

}

// Set the largest value as the first element in the arr
largest = array[0];

for (i = 1; i < size; i++) {

  if (largest < array[i]) {
        largest = array[i];
  }
}

printf("\nLargest element present in the given array is : %d\n", largest);

// Always FREE your allocated memory
free(array);

return 0;

}

09-25 21:07