Почему не работает цикл с 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)
