gpt4 book ai didi

c - 我的代码有什么问题吗?周长.c

转载 作者:行者123 更新时间:2023-11-30 20:34:59 25 4
gpt4 key购买 nike

好吧,这不起作用!有什么问题呢。有人可以向我指出吗?我已经盯着它看了好几个小时了。我之前寻求过帮助,他提出了结构,但我并没有真正理解它,所以它不起作用。

没有得到正确的计算。我认为读取文件时可能出现问题。 /* 读取二进制文件并计算多边形参数 */

 typedef int16_t points[2];

int main(int argc, char* argv[]) {
FILE* fp = fopen(argv[1], "rb");
// int points[1000];
//long numbytesread=0;
int16_t num_of_coors=0;

//open the files

if( fp == NULL ) {
printf("Could not open.\n");
return -1; // -1 indicates error
}

//read file
fread(&num_of_coors, sizeof(int16_t), 2, fp);

points*points=malloc(sizeof(points)*num_of_coors);

fread(points, sizeof(points), num_of_coors, fp);



//read the array and seperate x coordinates and y coordinates
//calculate using formula (x1-x2)^2+(y1-y2)^2
//need 2 points, 4 coordinates at any single time. read a pair at a time

double sum=0;
int i=0;
//int coors=points[0]*2+1 ;

for(i=1;i<=num_of_coors;i++){
sum+=sqrt(pow((points[i]-points[i+2]),2) + pow((points[i+1]-points[i+3]),2));
}
sum+=sqrt(pow((points[1]-points[num_of_coors-2]),2) + pow((points[2]-points[num_of_coors-1]),2));
printf("The perimeter is %.2lf\n", sum);

fclose(fp);
free(points);

}

最佳答案

我猜你的文件的二进制格式是:

int16_t <num of points>
int16_t <Xcoord> int16_t <Ycoord>
....

首先,对类型名称和变量名称使用相同的名称是不好的方法。 其次,您使用的“点”类型不正确。 正确的代码应如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

/*
read binary file and calculate parameter of polygon
*/

typedef int16_t points[2];

int main(int argc, char* argv[]) {
FILE* fp = fopen(argv[1], "rb");
// int points[1000];
//long numbytesread=0;
int16_t num_of_coors=0;



//open the files

if( fp == NULL ) {
printf("Could not open.\n");
return -1; // -1 indicates error
}

//read file
fread(&num_of_coors, sizeof(int16_t), 1, fp);

points* p=malloc(sizeof(points)*num_of_coors);

fread(p, sizeof(points), num_of_coors, fp);

//read the array and seperate x coordinates and y coordinates
//calculate using formula (x1-x2)^2+(y1-y2)^2
//need 2 points, 4 coordinates at any single time. read a pair at a time

double sum=0;
int i=0;
//int coors=points[0]*2+1 ;

for(i=1;i<num_of_coors;i++) {
sum+=sqrt(pow(p[i-1][0]-p[i][0],2)+pow(p[i-1][1]-p[i][1],2));
}
sum+=sqrt(pow(p[0][0]-p[num_of_coors-1][0],2)+pow(p[0][1]-p[num_of_coors-1][1],2));
printf("The perimeter is %.2lf\n", sum);

fclose(fp);
free(p);
return 0;
}

关于c - 我的代码有什么问题吗?周长.c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40736475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com