【问题标题】:Getting Error While Calculating Average in Array More Than 4 Elements in C在 C 中计算数组中超过 4 个元素的平均值时出错
【发布时间】:2020-07-04 19:25:48
【问题描述】:

我在 C 中执行了以下程序。它在 4 号之前都可以正常工作,如果您向前键入 5 号,我会收到 Segmentation fault: 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;
  };  

【问题讨论】:

  • 您是否使用 C99 规范进行编译?
  • C99 规范是什么意思?
  • 你是如何编译你的程序的?如果您使用的是命令行,您可以显示您的编译命令吗?
  • int input; int array[input]; 是哦,大错特错!
  • @DanielWalker pmg 是正确的。在 c99 中,您可以拥有变量数组,如链接所示。但是,在这种情况下,“输入”尚未初始化为任何内容。这很糟糕......

标签: arrays c average


【解决方案1】:

代码中的缺陷:

  1. 使用变量input uninitialized 来初始化一个数组。

  2. 试图获取先前错误确定的数组的大小。

  3. 变量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

【讨论】:

  • 哦,我明白了。惊人的!非常感谢@Rohan Bari
猜你喜欢
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2019-08-15
  • 2016-10-24
  • 2018-06-09
  • 2019-04-08
  • 1970-01-01
相关资源
最近更新 更多