index, numberOfChildern, child[0]...child[numberOfChildern-1]
キャッチは、すべての子供のために、私もindex, numberOfChildern, child[0]...child[numberOfChildern-1]
を印刷する必要があるということである、再帰的にそのような構造体の配列にデータを印刷する必要があります。
typedef struct node point;
typedef point **pointsList;
構造体:
struct node{
int index; //the order in the instance file
int x;//x coord
int y;//y coord
int parent;//parent in tree when added
int numChildern;//has val 0 -- 8 maybe, but doesn't matter the way I wrote it
int *child;
};
すべての構造体のすべての値が正しく設定されている、これは私がタスクを完了するために書き始めた不完全な方法です。
void printStringOfChildern(pointsList list, point *point, int fileNum){
if(point->numChildern == 0)
return;
//print the index
char index[calcNumberOfDigitsInAInt(point->index)+3];
sprintf(index, "%d", point->index);
strcat(index, ", ");
print(index, fileNum);
//print the number of childern
char chidern[calcNumberOfDigitsInAInt(point->numChildern)+3];
sprintf(chidern, "%d", point->numChildern);
strcat(chidern, ", ");
print(chidern, fileNum);
//print the childern
for(int i=0; i<point->numChildern; i++){
char child[calcNumberOfDigitsInAInt(point->child[i])+3];
//was child[i] now point->child[i]
sprintf(child, "%d", point->child[i]);
strcat(child, ", ");
print(child, fileNum);
//print out other childern and their data if there is any
int numChildern = numberOfChildern(list, point -> index);
if(numChildern > 0){
printStringOfChildern(list, list[point->child[i]], fileNum);
}
}
}
あなたは上記のコードはひどいと不完全でわかりますが、以下のelseブロックは、私は、端末A可能性が出力に印刷する方法であれば、それは私の印刷機能
ザ・の使用を示しファイルまたは一連のファイル。印刷機能とこれがelseブロックであるかどうかはテストされ、動作することが証明されています。 inOutTypeはグローバル変数で、outputFileNameも同様です。 fileIndexは、複数のファイルに印刷する場合にのみ使用され、複数のファイルに印刷する場合、このメソッドは多くのファイルに対して呼び出されます。これは、更新はサンプルであり、この
Output format:
index, numberOfChildern, child[i]. If child[i] has children then index, numberOfChildern, indexOf(child[i]), numberOfChildernOf(child[i]), child[i]OfChild[i].....
方法を記述し
if(inOutType == 1 || inOutType == 2){
printLineToOutPut(output, outputFileName, inOutType);
}else{
printToAInstanceFile(output, fileIndex);
}
はすべて私が編集にやった印刷機能ではそう
for(int j=0; j<maxNumberOfPoints; j++)
printStringOfChildern(listOfListOfPoints[i], listOfListOfPoints[i][j], i);
最初に、 'strcat()'の仕組みや 'sprintf()'が安全でないような基本を学びます。また、グローバル変数を避けてください!また、デバッグの重要なスキルを学びます。 –
は、誰かがすぐにそれを理解できるかどうかを見たいと思っています。今すぐ書いています。私が行ったように文字列のサイズを計算しなければ、strcatとsprintfは安全ではありません。この場合、グローバル変数の使用は簡単です。私はコードの90%を残しました。 @iharob – holycatcrusher
ドット '.'と矢印' - > '演算子の周囲にはスペースを入れないでください。それらは非常に緊密に束縛されており、その周りのスペースはせいぜい常套的であり、コードの作成者は初心者のCプログラマであることを示唆している。 (英語では、複数の「子」は「childern」ではなく「children」です) –