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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Получить квадратную матрицу порядка n — 1 путем отбрасывания в исходной матрице строки и столбца http://www.cyberforum.ru/cpp-beginners/thread1766441.html
В данной действительной квадратной матрице порядка n найти наибольший по модулю элемент. Получить квадратную матрицу порядка n — 1 путем отбрасывания в исходной матрице строки и столбца, на пересечении которых расположен элемент с найденным значением.
C++ Как вставлять коды в CodeBlocks Такая проблема, учусь программировать на языке С++ и для облегчения работы хочу вставлять некоторые коды в свою программу, но не знаю как. Высвечивается такая ахинея: При нажатии на нижнюю запись выскакивает ошибка, при нажатии на верхнюю другая ахинея: Что дальше делать не знаю:( http://www.cyberforum.ru/cpp-beginners/thread1766427.html
Как можно делать скрины в авторежиме? C++
Как можно делать скрины в авторежиме, что б сохранялись автоматически в jpg в фоновом режиме. Про эмуляцию Print Screen знаю, подскажите в каком направлении копать (WinAPI...)
C++ Код под видеокарты
:popcorn:Хотелось бы покодить под видюхи, запустить тот же хеллоу воролд, то есть, "нагрузку" с ЦП сбросить в видео карту. Как загуглить? Раньше видел на офф сайте nvidia, сейчас найти не могу.
C++ Распределение случайных чисел в промежутке [-1;1] http://www.cyberforum.ru/cpp-beginners/thread1766401.html
Добрый день! Как сгенерировать случайные числа в промежутке по равномерному закону распределения? Попытался сгенерировать следующим образом, но ведь это неверно. Есть какие-нибудь идеи или алгоритм? ii=rand()%2; if (ii==0) ed=1; else ed=-1; E=ed*0.01*(rand()%101);
C++ Записать числовые значения из файла в массив Есть такой код Извините за беспокойство, хотел спросить, как производится запись из файла в массив на языке С++? Есть такой пример, но здесь нет записи. Как ее сделать? #include <fstream> #include <iostream> using namespace std; int main() { подробнее

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

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 минуты
Спасибо за большую помощь, разобрался сам.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru