Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Итератор для работы с файлом. / 9 сообщений из 9, страница 1 из 1
28.09.2017, 22:55
    #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
29.09.2017, 05:15
    #39528031
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итератор для работы с файлом.
AlexMIELМой итератор пока вообще не работает, не заходит в цикл, хотя вроде логика есть. Какие нибудь советы?msdnIf successfull, fseek returns 0Поэтому условие в цикле сразу срабатывает.
...
Рейтинг: 0 / 0
29.09.2017, 08:05
    #39528057
ermak.nn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итератор для работы с файлом.
AlexMIEL,

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

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

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

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

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


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


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