Как распечатать до конца файла, используя struct?

В моем struct У меня есть поля

struct records {
    int link; 
    double gate; 
    char bar; 
};

И по моему main()

int main(int argc, char* argv[]){
    struct records rec;

    if(argc<2){//no paramaters
        //return error
    }

    FILE *fp=fopen(argv[1], "rb");

    if(fp==NULL){//no file
         //return error
    }
    while(!feof(fp)){ //fread for each struct field
        fread(&rec.link, sizeof(records.link), 1, fp);
        fread(&rec.gate, sizeof(records.gate), 1, fp);
        fread(&rec.bar, sizeof(records.bar), 1, fp);  
        printf("%d, %f, %c", rec.link, rec.gate, rec.bar);
    } //DONE ON PURPOSE!!! 

    fclose(fp);
    return 0;
}

Но это печатает последнюю запись дважды. Я пробовал вариации while а также feof лайк

while(1){
    if(feof(fp)!=0){
        break;
    fread...
 }

Но все они дважды распечатывают последнюю и только последнюю запись. Каждая другая запись распечатывается один раз, как и предполагалось. Почему это происходит и как мне заставить это работать должным образом?

0 ответов

Другие вопросы по тегам