powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Итератор для работы с файлом.
9 сообщений из 9, страница 1 из 1
Итератор для работы с файлом.
    #39527977
AlexMIEL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Возник вопрос. Задача: сделать свой итератор и считывать инты из бинарного файла. Мой итератор пока вообще не работает, не заходит в цикл, хотя вроде логика есть. Какие нибудь советы?
Модератор: Используй кнопку SRC для публикации кусков кода
Код: plaintext
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.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
#include <iostream>
#include <cstdio>


using namespace std;


class IntFile
{
public:
    //int index = 0;
    int value;
    FILE* file;
    IntFile() {}
    ~IntFile() {}
    int mnumbers[10];
    int mnumbers2[10];
    int mnumbers3[10];


    int getValue(int index)
    {
        fseek(file, 4*index, SEEK_SET);
        fread(&value, 4, 1, file);
        return value;
    }

    friend struct iterator;
    struct iterator
    {
        int index = 0;
        int value = 0;

        bool operator=(const iterator&other) const
        {
            return index == other.index;
        }
        bool operator!=(const iterator&other) const
        {
            return index!=other.index;
        }

        int &operator*()
        {
            //return value = IntFile::getValue(int index);
        }
        iterator&operator++()
        {
            this->index = index+1;
        }
        iterator&operator--()
        {
            index = index -1;
        }
    };
    iterator begin()
    {
        fseek(file, 0, SEEK_SET);
        //index = 0;
    }
    iterator end()
    {
        fseek(file, 0, SEEK_END);
        //index = 9;
    }
};



int main()
{
    IntFile file;
    int A;
    // Getting numbers from user and putting them to array
    /*
    cout << "Enter your numbers: ";
    for ( int i = 0; i < 10; i++)
    {
        cin >> file.value;
        file.mnumbers[i] = file.value;
        //cout << file.mnumbers[i] << " ";
    }
    cout << endl;


    file.file = fopen("text.txt", "r+b");
    fwrite(file.mnumbers,4,sizeof(file.mnumbers),file.file);
    fclose(file.file);
    */

    for ( int i = 0; i < 10; i++)
    {
        file.mnumbers2[i] = 0;
        cout << file.mnumbers2[i] << " ";
    }


    file.file = fopen("text.txt", "r+b");
    for (IntFile::iterator Iter = file.begin(); Iter != file.end(); ++Iter)
    {
        fread(file.mnumbers2,4,1,file.file);
        cout << " I " << endl;
        //cout << "Iterator: " << Iter;
    }

    cout << endl;
    A = file.getValue(9);
    cout << "A: " << A << endl;

    //cout << "array : ";
    for ( int i = 0; i < 10; i++)
    {
        cout << file.mnumbers2[i] << " ";
    }


    ////////////////////////////////////////
    fclose(file.file);
    return 0;
}
...
Рейтинг: 0 / 0
Итератор для работы с файлом.
    #39528031
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexMIELМой итератор пока вообще не работает, не заходит в цикл, хотя вроде логика есть. Какие нибудь советы?msdnIf successfull, fseek returns 0Поэтому условие в цикле сразу срабатывает.
...
Рейтинг: 0 / 0
Итератор для работы с файлом.
    #39528057
ermak.nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexMIEL,

При компиляции стоит указать -Wall, тогда он покажет на очевидные ошибки. Например, когда функция должна возвращать что-то, а она не возвращает ничего
...
Рейтинг: 0 / 0
Итератор для работы с файлом.
    #39528514
AlexMIEL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CEMb,

Чуть чуть поподробнее, пожалуйста. Если не трудно
...
Рейтинг: 0 / 0
Итератор для работы с файлом.
    #39528601
вЪю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexMIELCEMb,

Чуть чуть поподробнее, пожалуйста. Если не трудно

поподробнее сдесь . А когда наберёшся храбрости можно заглянуть и в заголовочный файл stl. Удачи.
...
Рейтинг: 0 / 0
Итератор для работы с файлом.
    #39528619
AlexMIEL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так нельзя, у меня от итератора только принцип, мне нужен свой, а не <iterator> ;(
...
Рейтинг: 0 / 0
Итератор для работы с файлом.
    #39528626
вЪю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexMIELТак нельзя, у меня от итератора только принцип, мне нужен свой, а не <iterator> ;(
так загляни в <iterator> и кастомизируй тот под себя. Делов то. cut-and-paste в твоей IDE надеюсь работает. Или жена преподаватель не разрешает.
...
Рейтинг: 0 / 0
Итератор для работы с файлом.
    #39528637
AlexMIEL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вЪю,

Преподаватель не разрешает
...
Рейтинг: 0 / 0
Итератор для работы с файлом.
    #39529124
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexMIELЧуть чуть поподробнее, пожалуйста. Если не трудноя немного забежал вперёд.
Под дебагом быстро посмотреть не чем, поэтому буду дебажить в голове.
Оба метода begin и end возвращают итератор по описанию и ничего по факту. По идее компилятор тут должен был выругаться, но раз не выругался, вызовется конструктор для iterator и будет создан объект. Когда я писал про fseek, что-то меня увело в сторону, я решил, что через значение fseek инициализируется итератор :) Т.е. видимо я решил, что автор подозревал, что fseek возвращает позицию в файле, которую он собирался записать в index, судя по тому, как он потом с ним обращался в ++, --, == и !=
Далее, оператор != использует значение index, которое будет равно нулю для обоих возвращаемых, поэтому
Код: plaintext
1.
Iter != file.end(); 


сразу даст false, так как в обоих итераторах index == 0, и цикл закончится, не начавшись.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Итератор для работы с файлом.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]