私は次のようにstruct
定義しています
typedef struct
{
char* name;
char* ID;
int marks;
char* details;
} Student;
そして別の
typedef struct
{
int n;
Student* stud_array;
} Batch;
ファイルには特定の形式の学生のさまざまなバッチのエントリがあり、私はそのファイルから読み取ってBatchArray
タイプのデータを入力していますBatch*
各フィールドが入力された後、私は使用しています
puts(BatchArray[no_of_batches-1].stud_array[i].name);
puts(BatchArray[no_of_batches-1].stud_array[i].ID);
printf("%d\n",BatchArray[no_of_batches-1].stud_array[i].marks);
結果を確認します。そしてそれは私に正しい出力を与えます。
ただし、すべてが完了した後、繰り返し処理する場合は、各構造体BatchArray
のフィールドのみが値を保持します。とmarks
はランダムなガベージ値であることが示されています。name
ID
反復コードは標準です。それにもかかわらず、ここにあります。
for(i = 0; i < no_of_batches; i++) {
currBSize = BatchArray[i].n;
printf("Batch %d\n", (i+1));
printf("Batch size %d\n", currBSize);
for(j = 0; j < currBSize; j++) {
puts(BatchArray[i].stud_array[j].name);
}
}
私が取り組んでいる問題は、各バッチの平均点を見つける必要があるので、それは問題ではありません。しかし、他のフィールドがガベージ値にリセットされる理由を知りたいのですが。
誰かがこれを手伝ってくれる?
編集:これが私がフィールドに入力する方法です。
このファイルは、次のようなエントリで構成されています
3名前1ID1マーク1名前2ID2マーク2名前3ID3マーク32名前4ID4マーク4名前5ID5マーク5
これがコードです。
no_of_batches = 0;
infileptr = fopen (infilename, "r");
BatchArray = (Batch *) malloc(sizeof(no_of_batches));
int MAX_BUFF = 100;
char currLine[MAX_BUFF];
while (fgets(currLine, MAX_BUFF, infileptr) != NULL) {
no_of_batches++;
BatchArray = (Batch *) realloc(BatchArray, no_of_batches*sizeof(Batch));
currBatchSize = atoi(currLine);
BatchArray[no_of_batches-1].n = currBatchSize;
printf("currBatchSize : %d\n",BatchArray[no_of_batches-1].n);
BatchArray[no_of_batches-1].stud_array = (Student *) malloc(currBatchSize*sizeof(Student));
for(i = 0; i < currBatchSize; i++) {
fgets(currLine, MAX_BUFF, infileptr);
currLine[strlen(currLine)-1] = '\0';
BatchArray[no_of_batches-1].stud_array[i].details = currLine;
//getting the Name from currLine
j = 0;
len = strlen(currLine);
char buildName[len];
while(currLine[j] != ' ') {
buildName[j] = currLine[j];
j++;
}
buildName[j] = '\0';
BatchArray[no_of_batches-1].stud_array[i].name = buildName;
j++;
//getting the ID from currLine
k = 0;
char buildID[len];
while(currLine[j] != ' ') {
buildID[k] = currLine[j];
j++;
k++;
}
buildID[k] = '\0';
BatchArray[no_of_batches-1].stud_array[i].ID = buildID;
puts(BatchArray[no_of_batches-1].stud_array[i].name);
puts(BatchArray[no_of_batches-1].stud_array[i].ID);
//getting the marks from currLine
k = 0;
j++;
char buildMarks[len];
while(currLine[j] != '\0') {
buildMarks[k] = currLine[j];
j++;
k++;
}
buildMarks[k] = '\0';
BatchArray[no_of_batches-1].stud_array[i].marks = atoi(buildMarks);
printf("%d\n",BatchArray[no_of_batches-1].stud_array[i].marks);
}
puts("");
}