作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要运行它,以便我可以分析实验室中的一些数据。但是,当程序运行并且我键入“n”的值时,它就会崩溃。有关如何纠正此问题的任何提示吗?
谢谢,代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
FILE *magfield;
FILE *means;
FILE *variances;
double *mean;
double *variance;
double field[12000];
double time[12000];
double sum=0, squares=0;
int i, j=0, k=0, l=0, n=0;
magfield=fopen("C:\\Users\\Owner\\Documents\\Homework\\ILab\\magneticfield.txt","r");
means=fopen("C:\\Users\\Owner\\Documents\\Homework\\ILab\\means.txt","w");
variances=fopen("C:\\Users\\Owner\\Documents\\Homework\\ILab\\variances.txt","w");
for (i=0;i<12000;i++)
{
fscanf(magfield,"%f %f", &time[i], &field[i]);
//printf("%f %f\n", time[i], field[i]);
}
printf("How many data points would you like to be analyzed at a time?\n");
scanf("%i", &n);
mean=(double*)calloc(n,sizeof(double));
variance=(double*)calloc(n,sizeof(double));
for (i=0;i<12000;i+=n)
{
for(j=i;j<n;j++)
{
sum+=field[j];
squares+=field[j]*field[j];
}
mean[k]=sum/n;
variance[k]=squares/n-(mean[k]*mean[k]);
fprintf(means,"%f\n", mean[k]);
fprintf(variances,"%f\n", variance[k]);
sum=0;
squares=0;
k++;
}
free(mean);
free(variance);
printf("Press enter to continue...\n");
getch();
return 0;
}
最佳答案
我建议#include <assert.h>
和assert(magfield != NULL); assert(means != NULL); assert(variances != NULL);
在你的fopen之后。此外,您可能应该assert(fscanf(...) == 2);
和assert(scanf(...) == 1);
。这些是调试辅助工具:如果出现任何失败,您就会知道这是由于文件丢失或意外输入造成的。 assert(mean != NULL); assert(variance != NULL);
以确保这些分配成功。您可以使用哪个断言来确保 k 始终小于 n?当 k 是均值或方差的无效索引时,如何确保不会访问均值[k] 或方差[k]?
this page 是什么意思?告诉你 %f
的类型格式说明符处理什么? &time[i]
是什么类型和&field[i]
?这些问题的答案应该相同,否则您将处理未定义的行为。
当您可以使用标准 stdio.h 中的可移植 getchar 来达到相同目的时,为什么要使用非标准 conio.h 中的非可移植 getch?
关于c - 为什么这个程序会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14970448/
我是一名优秀的程序员,十分优秀!