Помогите пожалуйста в написании функций синхронизации массива с файлом. Функция чтения должна
считывать из файла указанные символы массива. Предполагается, что файл содержит массив целиком и при чтении необходимо считывать соответствующие элементы массива:
Считываются с 3 по 5 элементы из файла в массив:
Файл: 1 4 6 2 3 5 6 7 8 9
Массив: _ _ _ 2 3 5 _ _ _ _
Остальные элементы массив должны остаться без изменений.
При записи из массива в файл действия аналогичны.
Ну вот, что у меня получилось:
#include<stdio.h>
#include<conio.h>
void mastofile(FILE *pF, int *mas, int a, int b )
{
int i;
pF=fopen("E:\C\fileN1","w+");
for (i=a;i<=b;i++)
{
fseek(pF, i*sizeof(int), SEEK_SET );
fwrite(&mas[i], sizeof(int), 1,pF);
}
fclose(pF);
}
void filetomas(FILE *pF, int *mas, int a, int b )
{
int i;
pF=fopen("E:\C\fileN1.dat","r");
for (i=a;i<=b;i++)
{
fseek(pF, i*sizeof(int), SEEK_SET );
fread(&mas[i], sizeof(int), 1,pF);
}
fclose(pF);
}
void ToShow(int mas[10])
{
int i;
for(i=0; i<=10; i++)
printf("\n3%d\n",mas[i]);
}
void main()
{
FILE *pF;
int masN1[5]={2,4,6,8,10},
masN2[5]={1,3,5,7,9};
clrscr();
filetomas(pF, masN1, 2, 4);
mastofile(pF, masN2, 2, 4);
ToShow(masN2);
}
Файл как создавал? Или ты думаешь, что текстовый файл отработает с fread()?
Сорри, ты сначала вызываешь filetomas, а там ты открываешь файл для "r", и если файла изначально нет - то будет ошибка... До создания файла дело не дойдет...
P.S. Пути нормально пропиши, кстати - бэкслеш должен быть двойным...
Ну, так ты покажи, КАК исправил...
#include<stdio.h>
#include<conio.h>
void mastofile(FILE *pF, int *mas, int a, int b )
{
int i;
pF=fopen("E:\\C\\fileN1.dat","w+");
for (i=a;i<=b;i++)
{
fseek(pF, i*sizeof(int), SEEK_SET );
fwrite(&mas[i], sizeof(int), 1,pF);
}
fclose(pF);
}
void filetomas(FILE *pF, int *mas, int a, int b )
{
int i;
pF=fopen("E:\\C\\fileN1.dat","r");
for (i=a;i<=b;i++)
{
fseek(pF, i*sizeof(int), SEEK_SET );
fread(&mas[i], sizeof(int), 1,pF);
}
fclose(pF);
}
void ToShow(int *mas)
{
int i;
for(i=0; i<=10; i++)
printf("\n3%d\n",mas[i]);
}
void main()
{
FILE *pF;
int masN1[5]={2,4,6,8,10},
masN2[5]={1,3,5,7,9};
clrscr();
mastofile(pF, masN1, 2, 4);
filetomas(pF, masN2, 2, 4);
ToShow(masN2);
}
У тебя печать неправильно сделана... В массиве masN2 нет 11 элементов, есть только 5... Ну, и сама форматная строка не так задается...
void ToShow(int *mas)
{
int i;
for(i=0; i < 5; i++)
printf("\n%3d\n",mas[i]); // У тебя было "3%d" - это дает совсем другой эффект
}
void ToShow(int *mas)
{
int i;
for(i=0; i < 5; i++)
printf("\n%3d\n",mas[i]); // У тебя было "3%d" - это дает совсем другой эффект
}