Почему не работает цикл с fread для обработки бинарного файла.?

Программа обрабатывает бинарный файл, было замечено, что результат выводит не тот, что должен. Был сделан тестовый вывод, просто посмотреть сколько раз выполняется цикл while. Вопрос в том, почему он выполняется 1 раз, хотя в файле, на основе которого "строился" бинарный - содержалось три записи. ( Если что, бинарный файл строился в другой программе и насколько было проверено - построен он так, как нужно). В общем, вопрос в том, почему while срабатывает один раз. И дело все таки в бинарнике или ошибка где-то в этом коде?

#include <stdio.h>
#include <stdlib.h>
#include "abitur.h"

void usage()
{
    printf("Usage: [input filename] [number of points]\n");
}

int main(int argc, char* argv[])
{
    if (argc != 3)
    {
        usage();
        return 1;
    }

    int pts = atoi(argv[2]);
    int n = 0;
    abitur p;
    FILE* inp = fopen(argv[1], "r");

    if (!inp)
    {
        perror("Can't open file");
        return 2;
    }

    while (fread(&p, sizeof(p), 1, inp) != 0)
    {
        n = n + 1;
    }

    printf("%d\n", n);
    return 0;
}

    #ifndef __abitur_h__
    #define __abitur_h__
    typedef struct
    {
    char fam[100];
    char init[50];
    char pol[10];
    int school;
    char medal[10];
    int bm;
    int bf;
    int br;
    char zachet[10];
    }
    abitur;
    #endif

программа созд. бин файла


    #include <stdio.h>
    #include <string.h>
    #include "abitur.h"
    void usage() {
    printf("Usage: input file output file\n");
    }
     
    int readabitur(FILE* inp, abitur* p)
    {
    return fscanf(inp, "%[^\t]\t%[^\t]\t%[^\t]\t%d\t%[^\t]\t%d\t%d\t%d\t%[^\t]\n",
    p->fam, p->init, p->pol, &p->school, p->medal, &p->bm, &p->bf, &p->br, p->zachet) ==9;
    }
     
    int main(int argc, char* argv[])
    {
    if (argc!=3)
    {
    usage();
    return 1;
    }
     
    abitur p;
    FILE* inp = fopen(argv[1], "r");
    FILE* out = fopen(argv[2], "w");
     
    if(!(out&&inp))
    {
    perror("Can't open");
    return 2;
    }
    while (readabitur(inp, &p))
    {
    fwrite(&p,sizeof(p),1,out);
    }
    return 0;
    }

исходный файл - таблица с тремя строками и 9-ю столбцами( кол-во строк не очень важно)

размер исходного - 86 байт размер бин. файла - 200

OS Unix (ubuntu)

бин файл введите сюда описание изображения


Ответы (0 шт):