Как поместить записи из файла с произвольным доступом в массив на языке программирования C? - PullRequest
0 голосов
/ 12 ноября 2009

Как поместить записи из файла произвольного доступа DATA.data в массив allRecs [10]?

/*Reading a random access file and put records into an array*/
#include <stdio.h>

/*  somestruct structure definition */
struct somestruct{
    char namn[20];
    int artNr;
}; /*end structure somestructure*/

int main (void) {
    int i = 0;
    FILE *file; /* DATA.dat file pointer */
    /* create data with default information */
    struct somestruct rec = {"", 0};
    struct somestruct allRecs[10]; /*here we can store all the records from the file*/
    /* opens the file; exits it file cannot be opened */
    if((file = fopen( "DATA.dat", "rb")) == NULL) {
        printf("File couldn't be opened\n");
    } 
    else { 
        printf("%-16s%-6s\n", "Name", "Number");
        /* read all records from file (until eof) */
        while ( !feof( file) ) { 
            fread(&rec, sizeof(struct somestruct), 1, file);
            /* display record */
            printf("%-16s%-6d\n", rec.namn, rec.artNr);
            allRecs[i].namn = /* HOW TO PUT NAME FOR THIS RECORD IN THE STRUCTARRAY allRecs? */
            allRecs[i].artNr = /* HOW TO PUT NUMBER FOR THIS RECORD IN THE STRUCTARRAY allRecs? */
            i++;
        }/* end while*/
        fclose(file); /* close the file*/
    }/* end else */
    return 0; 
}/* end main */

1 Ответ

1 голос
/ 12 ноября 2009

Два способа сразу приходят на ум. Во-первых, вы можете просто назначить, как это:

allRecs[i] = rec;

Но, судя по вашему коду, вам это даже не нужно - вы можете просто прочитать прямо в соответствующем элементе:

fread(&allRecs[i], sizeof(struct somestruct), 1, file);
/* display record */
printf("%-16s%-6d\n", allRecs[i].namn, allRecs[i].artNr);
i++;

Кстати - вы уверены, что файл никогда не будет содержать более 10 записей? Потому что если это произойдет, у тебя будут большие неприятности ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...