Форум программистов, компьютерный форум CyberForum.ru

Перевод указателя на N байт в файловом потоке - C++

Восстановить пароль Регистрация
 
Ogienko
5 / 5 / 1
Регистрация: 28.11.2014
Сообщений: 29
19.06.2016, 21:04     Перевод указателя на N байт в файловом потоке #1
Добрый день, помогите пожалуйста. Есть структура:

C++
1
2
3
4
5
struct Mystruct {
    char surname[20]; // Фамилия
    char numberOfTestBook[9]; // Номер зачетной книжки
    int evaluation[4]; // Оценки за экзамен
} student;
Происходит прямой ввод/вывод записей из файла.

Одна из функций:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
void FindUnsatisfactoryStudents(FILE *file) // Поиск не удв. и корректировка
{
    char ch;
    long size;
    file = fopen("DataBase.dat", "rb+"); // Открытие бинарного файла для чтения и записи
    fread(&student, sizeof(student), 1, file); // Чтение из файла одной структуры
    while (!feof(file))
    {
        if (student.evaluation[0] < 3 || student.evaluation[1] < 3 || student.evaluation[2] < 3 || student.evaluation[3] < 3)
        {
            printf("\nSurname: %s\n", student.surname);
            printf("Number test book: %s\n", student.numberOfTestBook);
            printf("The first estimate for the exam: %d\n", student.evaluation[0]);
            printf("The second estimate for the exam: %d\n", student.evaluation[1]);
            printf("Third grade for the exam: %d\n", student.evaluation[2]);
            printf("Fourth grade for the exam: %d\n", student.evaluation[3]);
            printf("\nCorrect? (y/n)\n");
            ch = _getch();
            if (ch == 'y')
            {
                printf("\nThe first estimate for the exam: ");
                scanf("%d", &student.evaluation[0]);
                printf("The second estimate for the exam: ");
                scanf("%d", &student.evaluation[1]);
                printf("Third grade for the exam: ");
                scanf("%d", &student.evaluation[2]);
                printf("Fourth grade for the exam: ");
                scanf("%d", &student.evaluation[3]);
                size = sizeof(student);
                fseek(file, -size, SEEK_CUR);
                fwrite(&student, sizeof(student), 1, file); // Запись изменённой структуры на прежнее место
            }
        }
        fread(&student, sizeof(student), 1, file);
    }
    fclose(file);
}
Если была найдена структура с студентом у которого есть хоть 1 оценка меньше 3, то происходит запрос на корректировку его данных.

Далее вводится новая информация, и вот в чем вопрос, как записать эту структуру файл в то же место, откуда она была прочитана.

По сути нужно указатель вернуть назад на количество байт занимаемой 1 структурой, вот код:

C++
1
2
3
size = sizeof(student);
fseek(file, -size, SEEK_CUR);
fwrite(&student, sizeof(student), 1, file); // Запись изменённой структуры на прежнее место
Но после этого кода, структура файла сбивается. Прошу помочь, спасибо.

Добавлено через 3 часа 24 минуты
Спасибо за большую помощь, разобрался сам.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2016, 21:04     Перевод указателя на N байт в файловом потоке
Посмотрите здесь:

перемещение указателя в потоке... C++
C++ Перевод указателя в начало файла
В чем ошибка в файловом потоке? C++
Перевод указателя в итератор C++
C++ Преобразование кода без указателя в код с использованием указателя
Перевод строки в массив байт C++
Как сделать функцию от указателя на класс и указателя на метод? C++
C++ Перевод указателя в начало файла - C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
19.06.2016, 21:41     Перевод указателя на N байт в файловом потоке #2
Цитата Сообщение от Ogienko Посмотреть сообщение
разобрался сам.
Молодец. Извини что мы не так оперативно работаем.
Yandex
Объявления
19.06.2016, 21:41     Перевод указателя на N байт в файловом потоке
Ответ Создать тему

Метки
c++, fseek
Опции темы

Текущее время: 11:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru