C 如何填充它所在的数组';s结构的一部分,使用的函数可以';不能将数组作为参数
好的,伙计们,请不要对我刻薄,我只是一个尝试我的手在这个编码的东西,并被它可怕的困惑的女孩 我有这个练习来创建一个抽象数据类型,其中一部分我需要从文件中获取一些值,并使用它们创建一行。在这个文件中,我首先得到了直线上的点数,然后是每个点的对坐标。 我使用的结构如下所示:C 如何填充它所在的数组';s结构的一部分,使用的函数可以';不能将数组作为参数,c,arrays,file,struct,abstract-data-type,C,Arrays,File,Struct,Abstract Data Type,好的,伙计们,请不要对我刻薄,我只是一个尝试我的手在这个编码的东西,并被它可怕的困惑的女孩 我有这个练习来创建一个抽象数据类型,其中一部分我需要从文件中获取一些值,并使用它们创建一行。在这个文件中,我首先得到了直线上的点数,然后是每个点的对坐标。 我使用的结构如下所示: typedef struct ponto{ double x; double y; } ponto; typedef struct linha{ double
typedef struct ponto{
double x;
double y;
} ponto;
typedef struct linha{
double numVertices;
ponto verticesLin[ ];
}linha;
我需要使用的功能是:
void criaLinha (linha *, double , ponto *);
因此,我编写了这段代码,通过使用该函数将数据从文件转换到buff,然后再转换到struct linha:
BuffToLine(ponto buff[], numMax, linha *l){
double i;
ponto Aux;
for(i=0, i<numMax , i++){
Aux.x = buff[i].x;
Aux.y = buff[i].y;
criaLinha(*l, i, *Aux);
}
}
void criaLinha (linha *l, double numVertices, ponto *vertices){
*l.verticesLin[numVertices].x = Aux.x;
*l.verticesLin[numVertices].y = Aux.y;
}
BuffToLine(蓬托buff[],纽马克,林哈*l){
双i;
奥克斯桥;
对于(i=0,i,您的代码有很多错误
第一:
ponto verticesLin[ ];
不是有效的标准C,gcc
将接受此选项,但如果您希望在结构中具有尾部数组,则正确的声明为:
ponto verticesLin[0];
如果这样做,则需要为结构分配足够的内存
第二:
double i;
不要对数组索引使用double
类型,使用int
或size\t
第三:正确地缩进代码并给变量赋予有意义的名称是一种很好的做法,否则即使你下个月也读不懂
现在,如果您将结构声明为
typedef struct ponto {
double x;
double y;
} ponto;
typedef struct linha {
size_t numVertices; // counters should have an integer type
ponto verticesLin[0];
} linha;
然后,在创建linha
的实例时,需要分配足够的空间
linha * l = malloc(sizeof(l) + numVertices * sizeof(ponto));
传递参数时,还需要正确输入类型:
void criaLinha (linha * l, size_t numVertices, ponto * vertices);
BuffToLine(ponto buff[], size_t numMax, linha * l) {
size_t i; // should be an integer type
ponto Aux;
for(i=0, i< numMax , i++){
Aux = buff[i]; // you can copy the whole thing, no need to to it by variable
criaLinha(
l // l is already a pointer no need to dereference it
, i
, &Aux // Aux is a ponto, you need a ponto*, so you need to take the address of it
);
}
}
void cralinha(linha*l、尺寸/垂直度、ponto*顶点);
BuffToLine(ponto buff[],尺寸为mm,linha*l){
size\u t i;//应为整数类型
奥克斯桥;
对于(i=0,i
希望这有点帮助,您没有提供足够的代码来帮助您完成更多工作。您对第二个结构的声明是错误的。它没有编译或运行有什么问题?(顺便说一句,Uchia是对的)@UchiaItachi如果他使用的是支持的C99兼容编译器,那么第二种结构就没有错。但是,使用double
进行索引肯定是错误的。@WhozCraig不知道这一点。谢谢你的链接:)它没有运行,因为我需要创建一个缓冲区来用文件数据填充linha结构。但我不知道如何做。测试文件是这样的:2-98546
1这是另一行的开始,我不知道如何在创建第一行时阻止缓冲区也得到它。我希望它不会太混乱。(我已经修复了结构,谢谢)谢谢,这确实有点帮助。但是我不能更改函数criaLinha
的参数类型。整个代码应该是一个ADT,使用文件中给定的坐标创建点、线和多边形。我应该实现使用参数中的类型给出的某些函数。因此,如果文件是这样的5-6 7第一个number是一行中的点的数量,其他的是点。我需要使用它来创建linha l
,使用函数cralinha(linhal,numVertice,ponto)。如果它们需要作为指针,也许我应该将函数移出另一个BuffToLine
?您应该注意他对ponto verticesLin[]
如果成员使用的是兼容C99的编译器,则该成员是合法的。