C 添加数组元素并存储在数组中

C 添加数组元素并存储在数组中,c,arrays,C,Arrays,这段代码从文件中获取数据并将其存储在数组中。然后它搜索整个数组,如果数字在.5和50000之间(只是为了删除0和大的数字),它将进入if语句。在该语句中,如果数字等于下一个,它将检查另一个数组以过滤出小的和大的数字,然后将其相加,并将其存储到平均值并添加计数器。它会这样做,直到数组2中的数字不等于它出来的下一个数字,并计算其平均值,等等 它做得很好,直到它达到平均值[j]=平均值[j]+array1[i],我试着用printf检查那部分,它吐出一个巨大的负数。均值数组与计数器一起设置为全零。pl

这段代码从文件中获取数据并将其存储在数组中。然后它搜索整个数组,如果数字在.5和50000之间(只是为了删除0和大的数字),它将进入if语句。在该语句中,如果数字等于下一个,它将检查另一个数组以过滤出小的和大的数字,然后将其相加,并将其存储到平均值并添加计数器。它会这样做,直到数组2中的数字不等于它出来的下一个数字,并计算其平均值,等等

它做得很好,直到它达到平均值[j]=平均值[j]+array1[i],我试着用printf检查那部分,它吐出一个巨大的负数。均值数组与计数器一起设置为全零。plz帮助:L

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

int main(void)
{
  FILE *fp;
  float array1[1000], array2[1000], mean[1000], average[1000], counter[1000], range[1000], upper[1000], lower[1000];
  int a, h, i, r, j = 0, pos, found = 0, extrinsic[1000];
  int b=0;
  int linect = 1;
  char buf[128];
  extrinsic[100] = 0;
  mean[100] = 0;
  counter[100] = 0;
  range[100] = 0;
  upper[100] = 0;
  lower[100] = 0;
  average[100] = 0;
  i = 0;
  j = 0;
  fp = fopen("data.txt", "r");

  if(fp == NULL)
  {
    puts("Cannot open file for reading");
    scanf("%d", &a);
    exit(EXIT_FAILURE);
  }

  while( linect < 1000 ) 
    {
    fgets(buf, sizeof(buf), fp);
    sscanf(buf, "%f", &array1[i]);
    //printf("Set %d - 1st: %f\n", linect, array1[i]);
    linect++;
    i++;
    }
  fclose(fp);


  linect = 0; //reads lot data file and puts it in array2
  i = 0;
  fp = fopen("lot_numbers.txt", "r");
  if(fp == NULL)
  {
    puts("Cannot open file for reading");
    scanf("%d", &a);
    exit(EXIT_FAILURE);
  }
  while( linect < 1000 ) 
    {
    fgets(buf, sizeof(buf), fp);
    sscanf(buf, "%f", &array2[i]);
   // printf("Set %d - 1st: %f\n", linect, array2[i]);
    linect++;
    i++;
    }


  for (i = 0; i < 999; i++) //searches array sets repeated points to zero
  {
      if (array1[i] == array1[i+1])
      {
          array1[i] = 0;
          array2[i] = 0;
      }
  }
  for (i = 0; i < 9; i++)   //searches array
  {
      if (array2[i] > .5 && array2[i] < 50000)
      {
        if (array2[i] == array2[i+1])
        {
          if (array1[i] > .5 && array1[i] < 500){  //ignores zeros and junk data 
          mean[j] = mean[j] + array1[i];
          counter[j]= counter[j] + 1;
        }
      }
      else {
          average[j] = mean[j]/counter[j];
          range[j] = average[j] * 0.1;
          upper[j] = average[j] + range[j];
          lower[j] = average[j] - range[j];
          j++;
           }
      }
  }
  j = 0;
  while (j <10){
  printf("\n%f", mean[j]);
  j++;
  }
scanf("%d", &a);

return 0;
 }
#包括
#包括
#包括
内部主(空)
{
文件*fp;
浮点数组1[1000],数组2[1000],平均值[1000],平均值[1000],计数器[1000],范围[1000],上限[1000],下限[1000];
inta,h,i,r,j=0,pos,find=0,外在[1000];
int b=0;
int-linect=1;
char-buf[128];
外在的[100]=0;
平均值[100]=0;
计数器[100]=0;
范围[100]=0;
上限[100]=0;
下限[100]=0;
平均值[100]=0;
i=0;
j=0;
fp=fopen(“data.txt”,“r”);
如果(fp==NULL)
{
puts(“无法打开文件进行读取”);
scanf(“%d”和“&a”);
退出(退出失败);
}
而(线性电流互感器<1000)
{
fgets(buf,sizeof(buf),fp);
sscanf(buf、%f、&array1[i]);
//printf(“集合%d-第一个:%f\n”,linect,数组1[i]);
linect++;
i++;
}
fclose(fp);
linect=0;//读取批次数据文件并将其放入array2
i=0;
fp=fopen(“批号.txt”,“r”);
如果(fp==NULL)
{
puts(“无法打开文件进行读取”);
scanf(“%d”和“&a”);
退出(退出失败);
}
而(线性电流互感器<1000)
{
fgets(buf,sizeof(buf),fp);
sscanf(buf、%f、&array2[i]);
//printf(“集合%d-第一个:%f\n”,linect,array2[i]);
linect++;
i++;
}
对于(i=0;i<999;i++)//搜索数组将重复点设置为零
{
if(array1[i]==array1[i+1])
{
阵列1[i]=0;
阵列2[i]=0;
}
}
对于(i=0;i<9;i++)//搜索数组
{
if(array2[i]>0.5&&array2[i]<50000)
{
if(array2[i]==array2[i+1])
{
if(array1[i]>.5&&array1[i]<500){//忽略零和垃圾数据
平均值[j]=平均值[j]+阵列1[i];
计数器[j]=计数器[j]+1;
}
}
否则{
平均值[j]=平均值[j]/计数器[j];
范围[j]=平均[j]*0.1;
上限[j]=平均[j]+范围[j];
下[j]=平均[j]-范围[j];
j++;
}
}
}
j=0;

而(j我从未在C中见过这种语法:

平均值[100]=0

尝试在中使用标准的init方法


mean[100]={0};

你对mean[]的内容和使用的索引说了些什么?所有变量的类型是什么?小心
float
double
变量的相等性测试。数组都是类型float
mean[100]=0;
产生
错误:无效的初始值设定项
在编译(即
-Wall-Wextra
)时始终启用警告,然后读取并解析发出的警告。与未使用
类型
声明的其余变量一样。1D数组被初始化
={0}