当我运行这个程序时,我一直得到一个分段错误。我尝试读取文件(插入到命令行中),并将每个文件中的x和y坐标分配给一个动态分配的内存结构POINTS (使用名为readPoints的函数)。在将它们保存到这些结构中之后,我将它们传递给函数调用calc,其中x和y值相乘,然后相加到下一个x和y相乘的值上。等等。有人能给我解释一下我哪里出错了吗?我不擅长指点。提前谢谢你。
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
float xcord;
float ycord;
}POINTS;
int readPoints(char* file, int numofpoints);
int calc(POINTS* points, int numofpoints);
int main(int argc, char* argv[])
{
int numoffiles;
FILE* file;
int result, i;
numoffiles = argc;
POINTS* pointer;
int numofpoints;
if(numoffiles == 1)
{
printf("Please enter a file\n");
}
for(i=1; i<numoffiles; i++)
{
file = fopen(argv[i], "r");
fscanf(file, "%d", &numofpoints);
pointer = readPoints(file, numofpoints);
if( pointer == NULL)
{
printf("Error return from readPoints function");
}
result = calc(&pointer[i], numoffiles);
printf("%12f", result);
free(pointer);
}
}
int readPoints(char* file,int numofpoints)
{
int i, j;
POINTS* Pointstructs;
Pointstructs = (POINTS*)malloc((numofpoints)*sizeof(POINTS));
if(file == NULL)
{
printf("Error transferring file into readPoints\n");
}
for(i=0; i<numofpoints; i++)
{
fscanf(*file, "%f, %f", &Pointstructs[i].xcord, &Pointstructs[i].ycord);
printf("%f, %f", Pointstructs[i].xcord, Pointstructs[i].ycord);
}
return Pointstructs;
}
int calc(POINTS* points, int numofpoints)
{
int i=0, j=0;
int answer;
while(i<numofpoints && j<numofpoints)
{
answer += points[i].xcord * points[j].ycord;
i++;
j++;
}
return answer;
}发布于 2017-10-07 00:05:59
readpoints函数应该把它的第一个参数作为文件指针,BCS fopen返回文件指针,但是你使用的是char指针。fscanf第一个参数应该是文件指针。请改正
https://stackoverflow.com/questions/46602298
复制相似问题