30/09/2018, 17:08

Lỗi unhandle exception lệnh fscanf

#include<stdio.h>
#include<math.h>
#define MAX 100
//define struct
struct tree
{
	int X;
	int Y;
	unsigned int type, year;
} ;
struct farm
{
	unsigned int num_of_trees;
	tree* treeArray;
} ;

//prototype
void read_tree(FILE *f, tree *info, int n);
void read_file(FILE *f, tree *data, int n);
void number_per_type(tree* data, int n, int &cs, int &che, int &cf);
int min_row_index(farm nongtrai);
int max_row_index(farm nongtrai);
int min_col_index(farm nongtrai);
int max_col_index(farm nongtrai);
int min_chuvi(farm nongtrai);
double distance(tree a, tree b);
void save_all_distance(farm data, double distances[][MAX]);
double min_ongnuoc(double distances[][MAX], int number_of_tree);

int main()
{
	int caosu, che, cafe;
	farm mF;
	farm *dummy;
	dummy = &mF;
	dummy = NULL;
	double distances[MAX][MAX];
	FILE *fin = fopen("NongTrai.in", "rt");
	FILE *fout = fopen("NongTrai.out", "wt");
	if (fin == NULL)
	{
		perror("Error opening file!");
		return 0;
	}
	fscanf(fin, "%u
", &mF.num_of_trees);
	for (int i = 0; i < mF.num_of_trees; i++)
	{
		fscanf_s(fin, "%d", &mF.treeArray[i].X);
		fscanf_s(fin, "%d", &mF.treeArray[i].Y);
		fscanf_s(fin, "%u", &mF.treeArray[i].type);
		if (mF.treeArray[i].type == 0)
			caosu++;
		else if (mF.treeArray[i].type == 1)
			che++;
		else cafe++;
		fscanf_s(fin, "%u", &mF.treeArray[i].year);
	}

	fprintf(fout, "%d %d %d
", &caosu, &che, &cafe);
	fprintf(fout, "%d
", min_chuvi(mF));

	save_all_distance(mF, distances);
	fprintf(fout, "%.2f", min_ongnuoc(distances, mF.num_of_trees));

	printf("
Ket thuc chuong trinh!");
	fclose(fin);
	fclose(fout);

	return 0;
}

void number_per_type(tree* data, int n,int &cs,int &che,int &cf)
{
	for (int i = 0; i < n; i++)
	{
		if (data[i].type == 0)
			cs++;
		if (data[i].type == 1)
			che++;
		if (data[i].type == 2)
			cf++;
	}
}
int min_row_index(farm nongtrai)
{
	int min = nongtrai.treeArray[0].X;

	for (int i = 0; i < nongtrai.num_of_trees;i++)
	if (min >= nongtrai.treeArray[i].X)
		min = nongtrai.treeArray[i].X;

	return min;
}
int max_row_index(farm nongtrai)
{
	int max = nongtrai.treeArray[0].X;

	for (int i = 0; i < nongtrai.num_of_trees; i++)
	if (max <= nongtrai.treeArray[i].X)
		max = nongtrai.treeArray[i].X;

	return max;
}
int min_col_index(farm nongtrai)
{
	int min = nongtrai.treeArray[0].Y;

	for (int i = 0; i < nongtrai.num_of_trees; i++)
	if (min >= nongtrai.treeArray[i].Y)
		min = nongtrai.treeArray[i].Y;

	return min;
}
int max_col_index(farm nongtrai)
{
	int max = nongtrai.treeArray[0].Y;

	for (int i = 0; i < nongtrai.num_of_trees; i++)
	if (max <= nongtrai.treeArray[i].Y)
		max = nongtrai.treeArray[i].Y;

	return max;
}
int min_chuvi(farm nongtrai)
{
	int W, H;
	W = (int)(max_row_index(nongtrai) - min_row_index(nongtrai));
	H = (int)(max_col_index(nongtrai) - min_col_index(nongtrai));
	return ((W + H) * 2);
}
double distance(tree a, tree b)
{
	double ret;
	ret = sqrt(1.0*(a.X - b.X)*(a.X - b.X) + (a.Y - b.Y)*(a.Y - b.Y));
	return ret;
}
void save_all_distance(farm data,double distances[][MAX])
{
	for (int i = 0; i < data.num_of_trees; i++)
	{
		for (int j = 0; i < data.num_of_trees; j++)
		{
			if (i == j)
				distances[i][j] = 0;
			else
				distances[i][j] = distance(data.treeArray[i], data.treeArray[j]);
		}
	}
}
double min_ongnuoc(double distances[][MAX], int number_of_tree)
{
	double result;
	int min;
	for (int i = 1; i < number_of_tree; i++)
	{
		min = distances[i][0];
		for (int j = i+1; j < number_of_tree-1; j++)
		{
			if (min > distances[i][j])
				min = distances[i][j];
		}
		result += min;
	}
	return result;
}

Em không hiểu tại sao chương trình chạy đến đoạn

for (int i = 0; i < mF.num_of_trees; i++)
{
...
}

thì nó dừng ngay chỗ lệnh fscanf và khi debug thì nó báo ngay chỗ đó là unhandle exception @@ anh chị nào có thể khai sáng cho em là code của em sai cái gì không ạ?
À còn thông tin trong file input mỗi dòng của nó có dạng như 2 3 0 1996.
Em cảm ơn trước.

Minh Hoàng viết 19:14 ngày 30/09/2018

mf.treeArray chưa được cấp phát thì phải

Ha Gia Phat viết 19:12 ngày 30/09/2018

để em thủ sửa lại @@

Bài liên quan
0