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.
Bài liên quan
mf.treeArray
chưa được cấp phát thì phảiđể em thủ sửa lại @@