我编写了一个程序来计算一个动态大小数组(由用户给出)的算术均值和协方差,这个数组是使用malloc声明的,但是程序没有输出预期的输出。因此,我使用断点来观察数组中的值,并发现值没有变化。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
void main()
{
int n;
printf("enter n: \n");
scanf("%d", &n);
double sum = 0, m, spv;
double *x = (double *)malloc(sizeof(double)*n);
for (int i = 0; i < n; ++i)
{
scanf("%f", x[i]);
sum += x[i];
}
m = sum / n;
printf("Mittel = %f\n", m);
sum = 0;
for (int i = 0; i < n; ++i)
{
sum += pow((x[i] - m), 2);
}
spv = sum / (n - 1);
printf("SPV = %f\n", spv);
free(x);
return;
}发布于 2017-11-10 05:08:22
scanf("%f", &x[i]);你需要传递地址。
还检查malloc的返回值。也不要抛出malloc的结果。
在阅读double时,请使用%lf。scanf("%lf",&x[i]);
double *x = malloc(sizeof(double)*n);
if( x == NULL){
fprintf(stderr,"%s","Error in malloc");
exit(1);
}按照标准(c99)(§7.21.6.9)
如果任何参数不是对应的转换规范的正确类型,则行为是未定义的。
由于不使用&,scanf将尝试在以x[i]而不是&x[i]表示的内存位置中写入。因为它包含垃圾值,所以它可能是内存中的某个位置,从而导致了一种未定义的行为。
发布于 2017-11-10 05:13:34
scanf期望一个地址作为参数
改变这个
scanf("%f", x[i]);至
scanf("%f", &x[i]);还有"%f“-> "%lf”
https://stackoverflow.com/questions/47215995
复制相似问题