0

OK、みんな、私に意地悪しないでください、私はこのコーディングのことを試してみて、ひどく混乱しているただの女の子です.

抽象データ型を作成するこの演習があり、その一部で、ファイルからいくつかの値を取得し、それらを使用して行を作成する必要があります。ファイルには、最初にライン内のポイントの数があり、次に各ポイントのペア座標があります。私が使用している構造体は次のとおりです。

    typedef struct ponto{
      double x;
      double y;
       } ponto;

    typedef struct linha{
      double numVertices;
      ponto verticesLin[ ];
       }linha;

そして、私が使用する必要がある機能はこれです:

void criaLinha (linha *, double , ponto *);

だから私はこのコードを書いて、ファイルからバフへ、そしてその関数を使って 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;
                 }

問題は、ファイルからバッファに値を渡す方法がわからないことです。また、バッファがないとテストできないため、書いたコードが機能するかどうかもわかりません。それで...誰かがこのバッファを作成する方法を理解するのを手伝ってくれますか?「criaLinha」関数を使用して行を作成するより良い方法があれば?

4

1 に答える 1

0

あなたのコードには多くの間違いがあります。

初め:

ponto verticesLin[ ];

は有効な標準 C ではありません。gccこれは受け入れられますが、構造体に末尾配列が必要な場合、適切な宣言は次のとおりです。

ponto verticesLin[0];

これを行う場合は、構造体に十分なメモリを割り当てる必要があります。

2番:

 double i;

double配列インデックスに type を使用しないでください。intまたはを使用してくださいsize_t

3 番目: コードを適切にインデントし、変数に意味のある名前を付けることは良い習慣です。

構造体を次のように宣言すると

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
        );
    }
}

これが少し役立つことを願っています。さらに役立つコードを提供していませんでした。

于 2013-09-01T17:02:30.463 に答える