此程序使用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;
}