我正在编写一个包含365个数据点的2D数组的程序,我们需要做的一件事就是找到数据的平均值,并将其打印到文件和命令窗口中。
#include <stdio.h>
#include <math.h>
void main(void) {
char Check[32] = {
'\0'
};
FILE * F = NULL;
FILE * R;
int ** size;
int x[500], y[500];
//ERROR CHECK FOR FILE
R = fopen("results.txt", "w");
while (F == NULL) {
printf("What is the name of the file?\n");
scanf("%s", & Check);
F = fopen(Check, "r");
if (F == NULL) {
printf("Error: file not found\n");
}
}
//READ DATA FROM FILE
for (int i = 1; i <= 500; i++) {
size = fscanf(F, "%d %d", & x[i], & y[i]);
if (size == EOF) {
break;
} else {
printf("Temperatures on Day %d in 1930 = %d \t 2001 = %d\n", i, x[i], y[i]);
fprintf(R, "Temperatures on Day %d in 1930 = %d \t 2001 = %d\n", i, x[i], y[i]);
}
}
fclose(R);
printf("\n");
//FIND MEAN OF DATA
int sum1 = 0, sum2 = 0;
for (int f = 0; f <= 365; f++) {
sum1 = sum1 + size[f][0];
sum2 = sum2 + size[f][1];
}
double mean1 = (double) sum1 / 365;
double mean2 = (double) sum2 / 365;
//PRINT TO FILE
FILE * L;
L = fopen("results.txt", "a");
printf("\nThe average temperature of 1930 is: %lf\nThe average temperature of 2001 is: %.4lf", mean1, mean2);
fprintf(L, "\nThe average temperature of 1930 is: %lf\nThe average temperature of 2001 is: %.4lf", mean1, mean2);
}
然而,我已经构建了几次代码,当我运行它时,程序不会将平均值打印到命令窗口。它只是不会执行之后的任何代码,而且它也不会将我想要的语句放入我创建的文件中。我已经附加了一个图像,说明我的程序在运行时会做什么。除了完成数据循环后的一个小延迟外,它似乎运行得很好。我试着在网上寻找解决方案,但我发现似乎对我的问题没有任何帮助。我已经多次重建程序,而且还多次关闭和启动了Geany(我使用的软件)。如果有帮助的话,我的代码保存在一个.C文件中。
enter image description here
2条答案
按热度按时间uxh89sit1#
此scanf调用的第二个参数表达式
的类型无效。相反,您需要编写
数组x和y的有效索引范围如下声明
是
[0, 500)
所以这个for循环
可以调用未定义的行为。
声明为具有指针类型的变量size
所以在这些陈述中使用它
没有意义。函数
fscanf
的返回类型是int
。函数声明如下在for循环之后,指针的值将为EOF或值2(假设代码将被编译)。
调用未定义的行为。
41zrol4v2#
很难理解
size
的用法。它被声明为int **
,但是,赋值是size = fscanf(F, "%d %d", & x[i], & y[i]);
。那么在第一个for循环结束后,size
应该是EOF
。然后在第二个for循环中取消引用它将导致未定义的行为,从而中止程序。在我看来,你应该使用数组x[]
和y[]
来计算均值。而且,第一个循环是[1..500],第二个是[0..365],即使你使用x[]
和y[]
来计算均值,因为两个数组都没有初始化,访问x[0]
和y[0]
将产生垃圾值,导致错误的结果。