尝试从DataSet扫描数组,但在C中继续获取总线错误

尝试从DataSet扫描数组,但在C中继续获取总线错误,c,arrays,segmentation-fault,average,scanf,C,Arrays,Segmentation Fault,Average,Scanf,我试图从终端中的数据集中扫描数据,并在数据达到-1时结束数据的拉入。但由于某些原因,我继续得到一个总线错误或分段错误(核心转储)错误。有人知道我做错了什么吗??我知道它在某个地方 #include <stdio.h> int main(void) { int i, dataset[200]={0}, count, sum; float average = 0; while(dataset[i] != -1) { scanf("%i", &dataset[i]);

我试图从终端中的数据集中扫描数据,并在数据达到-1时结束数据的拉入。但由于某些原因,我继续得到一个总线错误或分段错误(核心转储)错误。有人知道我做错了什么吗??我知道它在某个地方

#include <stdio.h>
int main(void)
{
int i, dataset[200]={0}, count, sum;
float average = 0;

while(dataset[i] != -1)
{
   scanf("%i", &dataset[i]);
   sum += dataset[i];
   count++;
}

average = sum/count;

printf("The average is %f\n", average);

return 0;
#包括
内部主(空)
{
inti,数据集[200]={0},计数,和;
浮动平均值=0;
while(数据集[i]!=-1)
{
scanf(“%i”和数据集[i]);
总和+=数据集[i];
计数++;
}
平均数=总和/计数;
printf(“平均值为%f\n”,平均值);
返回0;
}


我还想最终将其转换为一个函数,但我正试图弄清楚如何首先扫描数据集,并将其分配给数据集,当它达到值-1时停止提取数字。

初始化
I
并在循环中更新它

i=0;
while(dataset[i] != -1 && i<200) //200 is size of array,
{
   scanf("%i", &dataset[i]);
   sum += dataset[i];
   count++;
   i++; //you can do away with count as you have i
}
i=0;
而(数据集[i]!=-1&&i
假设您在第200个元素中输入了-1,那么您将把i增加到201,然后您的值显然超出了范围,并且有一个设置错误


2) 始终初始化变量,否则将获取存储在ram中的垃圾值。

在循环中从不递增
i
,因此这是无限循环。我不认为您在某个地方初始化
i
。我实现了您更正的代码,但仍然得到分段错误(内核转储)错误。我正在编译代码,然后我有一个单独的名为Dataset的文件,当我执行。out@Deej,您可能还希望将循环限制到
iOkay,这实际上消除了分段错误,但现在我得到了-11的输出。我的数据集包括(32812780362721259-1)@RohanIt增加了i++的值,实际上给出了11。。。我不知道为什么现在会这样……在递增I++之后,再看看您的原始代码通知,在while循环中,您正在检查数据集[I],但是-1在数据集[I-1]中;所以你几乎处于一个无限循环中。最后是seg断层
#include <stdio.h>
int main(void)
{
int i=0, dataset[200]={0}, count=0, sum=0;
float average = 0;

while(1)
{
scanf("%i", &dataset[i]);
if(dataset[i] == -1){
break;
}
sum += dataset[i];
    count++;
    i++;
}

average = sum/count;

printf("The average is %f\n", average);

return 0;
}
while(dataset[i] != -1)
{
scanf("%i", &dataset[i]);
sum += dataset[i];
count++;
i++ //i assumed you included i++ after reading some comments//
}