在 C 中计算超过 4 个元素的数组的平均值时出错
Getting Error While Calculating Average in Array More Than 4 Elements in C
我用 C 语言编写了以下程序。直到第 4 个程序都可以正常工作,如果您向前键入第 5 个程序,我会收到分段错误:11 错误?为什么?我找不到错误在哪里。谢谢。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
srand(time(NULL));
int sum, i, input;
int array [input];
float average;
sum = average = 0;
int size = sizeof (array) / sizeof(array[0]);
printf("Type the value of your array : ");
scanf("%d", &input);
printf("The size of your array is : %.2d \n", input);
for (i = 0; i < input; i++)
{
array[i] = rand() % 100 + 1;
}
// loop for printing results
for (i = 0; i < input; i++)
{
printf("Element %d; %d \n", i, array[i]);
}
for(i = 0; i < input; i ++){
sum = sum + array[i];
}
average = (float)sum / i;
printf("The average of array values is %.2f \n", average);
return 0;
};
代码缺陷:
使用未初始化的变量input
来初始化一个数组。
试图获取先前错误确定的数组的大小。
变量size
在整个程序中从未使用过(冗余声明)。
注:我将使用-std=c99
(C99标准)
gcc -std=c99 -o main main.c; ./main
代码重新定义(阅读添加的评论以解决问题):
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand(time(NULL));
int sum, i, input;
float average;
sum = average = 0;
printf("Type the value of your array : ");
scanf("%d", &input);
int array[input]; // placing after defining of 'input'
// int size = sizeof(array) / sizeof(array[0]); // unused variable
printf("The size of your array is : %.2d \n", input);
for (i = 0; i < input; i++)
array[i] = rand() % 100 + 1;
// loop for printing results
for (i = 0; i < input; i++) {
printf("Element %d; %d \n", i, array[i]);
sum += array[i];
}
average = (float) sum / i;
printf("The average of array values is %.2f \n", average);
return 0;
};
这将输出:
Type the value of your array : 10
The size of your array is : 10
Element 0; 6
Element 1; 14
Element 2; 66
Element 3; 73
Element 4; 19
Element 5; 14
Element 6; 62
Element 7; 78
Element 8; 31
Element 9; 31
The average of array values is 39.40
我用 C 语言编写了以下程序。直到第 4 个程序都可以正常工作,如果您向前键入第 5 个程序,我会收到分段错误:11 错误?为什么?我找不到错误在哪里。谢谢。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
srand(time(NULL));
int sum, i, input;
int array [input];
float average;
sum = average = 0;
int size = sizeof (array) / sizeof(array[0]);
printf("Type the value of your array : ");
scanf("%d", &input);
printf("The size of your array is : %.2d \n", input);
for (i = 0; i < input; i++)
{
array[i] = rand() % 100 + 1;
}
// loop for printing results
for (i = 0; i < input; i++)
{
printf("Element %d; %d \n", i, array[i]);
}
for(i = 0; i < input; i ++){
sum = sum + array[i];
}
average = (float)sum / i;
printf("The average of array values is %.2f \n", average);
return 0;
};
代码缺陷:
使用未初始化的变量
input
来初始化一个数组。试图获取先前错误确定的数组的大小。
变量
size
在整个程序中从未使用过(冗余声明)。
注:我将使用-std=c99
(C99标准)
gcc -std=c99 -o main main.c; ./main
代码重新定义(阅读添加的评论以解决问题):
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand(time(NULL));
int sum, i, input;
float average;
sum = average = 0;
printf("Type the value of your array : ");
scanf("%d", &input);
int array[input]; // placing after defining of 'input'
// int size = sizeof(array) / sizeof(array[0]); // unused variable
printf("The size of your array is : %.2d \n", input);
for (i = 0; i < input; i++)
array[i] = rand() % 100 + 1;
// loop for printing results
for (i = 0; i < input; i++) {
printf("Element %d; %d \n", i, array[i]);
sum += array[i];
}
average = (float) sum / i;
printf("The average of array values is %.2f \n", average);
return 0;
};
这将输出:
Type the value of your array : 10
The size of your array is : 10
Element 0; 6
Element 1; 14
Element 2; 66
Element 3; 73
Element 4; 19
Element 5; 14
Element 6; 62
Element 7; 78
Element 8; 31
Element 9; 31
The average of array values is 39.40