![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Rocket |
![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Помогите пожалуйста в написании функций синхронизации массива с файлом. Функция чтения должна
считывать из файла указанные символы массива. Предполагается, что файл содержит массив целиком и при чтении необходимо считывать соответствующие элементы массива: Считываются с 3 по 5 элементы из файла в массив: Файл: 1 4 6 2 3 5 6 7 8 9 Массив: _ _ _ 2 3 5 _ _ _ _ Остальные элементы массив должны остаться без изменений. При записи из массива в файл действия аналогичны. |
Rocket |
![]()
Сообщение
#2
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Ну вот, что у меня получилось:
#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);
}
Только она работает явно некорректно, в чём ошибка? |
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Файл как создавал? Или ты думаешь, что текстовый файл отработает с fread()?
|
Rocket |
![]()
Сообщение
#4
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Сорри, ты сначала вызываешь filetomas, а там ты открываешь файл для "r", и если файла изначально нет - то будет ошибка... До создания файла дело не дойдет...
P.S. Пути нормально пропиши, кстати - бэкслеш должен быть двойным... |
Rocket |
![]()
Сообщение
#6
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Сорри, ты сначала вызываешь filetomas, а там ты открываешь файл для "r", и если файла изначально нет - то будет ошибка... До создания файла дело не дойдет... P.S. Пути нормально пропиши, кстати - бэкслеш должен быть двойным... Исправил, сейчас вроде работает стабильно, но по-прежнему выводятся значения как-то по-левому. Как эт испарвить-то? |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Ну, так ты покажи, КАК исправил...
|
Rocket |
![]()
Сообщение
#8
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Ну, так ты покажи, КАК исправил... ну как-то так:
#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);
}
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
У тебя печать неправильно сделана... В массиве masN2 нет 11 элементов, есть только 5... Ну, и сама форматная строка не так задается...
void ToShow(int *mas)
{
int i;
for(i=0; i < 5; i++)
printf("\n%3d\n",mas[i]); // У тебя было "3%d" - это дает совсем другой эффект
}
|
Rocket |
![]()
Сообщение
#10
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
У тебя печать неправильно сделана... В массиве masN2 нет 11 элементов, есть только 5... Ну, и сама форматная строка не так задается... void ToShow(int *mas)
{
int i;
for(i=0; i < 5; i++)
printf("\n%3d\n",mas[i]); // У тебя было "3%d" - это дает совсем другой эффект
}
Во, всё отлично работает! Большое спасибо! |
![]() ![]() |
![]() |
Текстовая версия | 30.07.2025 4:07 |