Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Lesnik
3 / 3 / 2
Регистрация: 23.10.2014
Сообщений: 62
1

Бардак с файлами

06.06.2015, 01:37. Просмотров 254. Ответов 11
Метки нет (Все метки)

.seekp();
.seekg();
НЕ правильно перемещаются по целым числам
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2015, 01:37
Ответы с готовыми решениями:

Бардак с коммутаторами
Здравствуйте! После ремонта в кабинете не могу настроить подключение к инженерной станции, которая...

Бардак в файерфокс, появляются черные прямогольники
Что-то случилось с файерфокс. При движении колесика мыши появляются в разных местах черные...

Почему компилятор работает с файлами *.с, а не с файлами *.срр?
на скриншоте компилятор с++, почему он работает с файлами *.с, а не с файлами *.срр?

Работа с файлами , хотелось бы с windows system файлами
всем привет, нужна интересная идея по программированию, работа с файлами , хотелось бы с windows...

11
Velesthau
527 / 429 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
06.06.2015, 01:41 2
Цитата Сообщение от Lesnik Посмотреть сообщение
.seekp();
.seekg();
НЕ правильно перемещаются по целым числам
Эти функции старше и мудрее тебя. В твоем коде - ошибка.
0
lss
932 / 861 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
06.06.2015, 02:03 3
Цитата Сообщение от Lesnik Посмотреть сообщение
НЕ правильно перемещаются по целым числам
Эти методы для перемещения по байтам, а не по числам. Кроме того, для правильного перемещения, фалй должен быть открыт в бинарном режиме.
Код покажи, и опиши, что не так.
0
sereja322
3 / 3 / 3
Регистрация: 10.03.2015
Сообщений: 62
06.06.2015, 10:15 4
Кидай код, потому что непонятно, как ты их используешь
0
Lesnik
3 / 3 / 2
Регистрация: 23.10.2014
Сообщений: 62
06.06.2015, 12:33  [ТС] 5
Задание:
Дан файл, состоящий из n целых чисел. Поменять последнее четное и второе положительное числа в файле.
Реализация:
Кликните здесь для просмотра всего текста
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
#include <conio.h>
#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{
    fstream stream("a.txt");
    int p1=0, m1;
    int p2=0, m2;
    int b, i=0, j=0;
    while(!stream.eof())
    {
        stream >> b;
        if(b%2==0)
        {
            p1 = i;
            m1 = b;
        }
        if(j<2 && b>0)
        {
            p2 = i;
            m2 = b;
            j++;
        }
        i++;
    }
    stream.clear();
    stream.seekp(p1);
    stream << m2;
    stream.seekp(p2);
    stream << m1;
 
    stream.close();
}

Пример файла:
Кликните здесь для просмотра всего текста
-6
1
-9
1
6
4
-9
3
0
Velesthau
527 / 429 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
06.06.2015, 12:36 6
Пример файла:
Код C++
-6
1
-9
1
6
4
-9
3
Это не числа в файле, а текст. Файл должен быть записан бинарным способом, чтобы в нем были числа и тогда по нему можно правильно перемещаться.
0
Lesnik
3 / 3 / 2
Регистрация: 23.10.2014
Сообщений: 62
06.06.2015, 12:41  [ТС] 7
извините, нас этому преподаватель в универе не учил
0
Velesthau
527 / 429 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
06.06.2015, 12:43 8
Цитата Сообщение от Lesnik Посмотреть сообщение
извините, нас этому преподаватель в универе не учил
Это уже не ко мне вопрос. Но с текстом в файле и через seek ты правильно не спозиционируешься, так как число у тебя может 2 байта занять, а может и 6, и тогда следующее будет на разном смещении.
0
Lesnik
3 / 3 / 2
Регистрация: 23.10.2014
Сообщений: 62
06.06.2015, 13:08  [ТС] 9
Цитата Сообщение от Velesthau Посмотреть сообщение
Это уже не ко мне вопрос. Но с текстом в файле и через seek ты правильно не спозиционируешься, так как число у тебя может 2 байта занять, а может и 6, и тогда следующее будет на разном смещении.
кроме как использовать бинарник есть другой выход?

Добавлено через 3 минуты
Еще вопрос, есть ли разница при использование seekp и seekg для двунаправленного файлового потока?

Добавлено через 6 минут
Вот в новый файл числа переписываются нормально:
Кликните здесь для просмотра всего текста
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
38
39
40
41
42
#include <conio.h>
#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{
    ifstream stream("a.txt");
    int p1=0, m1;
    int p2=0, m2;
    int b, i=0, j=0;
    while(!stream.eof())
    {
        stream >> b;
        if(b%2==0)
        {
            p1 = i;
            m1 = b;
        }
        if(j<2 && b>0)
        {
            p2 = i;
            m2 = b;
            j++;
        }
        i++;
    }
    stream.clear();
    stream.seekg(0);
    ofstream stream2("a2.txt");
    i=0;
    while(!stream.eof())
    {
        stream >> b;
        if(i==p1) stream2 << m2;
        else stream2 << ((i==p2)?m1:b);
        stream2 << endl;
        i++;
    }
    stream.close();
    stream2.close();
}
0
Velesthau
527 / 429 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
06.06.2015, 13:13 10
Цитата Сообщение от Lesnik Посмотреть сообщение
кроме как использовать бинарник есть другой выход?
С использованием seek - нет.
Цитата Сообщение от Lesnik Посмотреть сообщение
Еще вопрос, есть ли разница при использование seekp и seekg для двунаправленного файлового потока?
Есть.
Цитата Сообщение от Lesnik Посмотреть сообщение
Вот в новый файл числа переписываются:
А у тебя там через seek ничего и не позиционируется, он просто не используется в этой программе.
0
Lesnik
3 / 3 / 2
Регистрация: 23.10.2014
Сообщений: 62
06.06.2015, 13:22  [ТС] 11
Цитата Сообщение от Velesthau Посмотреть сообщение
Цитата Сообщение от Lesnik
Еще вопрос, есть ли разница при использование seekp и seekg для двунаправленного файлового потока?
Есть.
Какой же?
0
Velesthau
527 / 429 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
06.06.2015, 13:32 12
Цитата Сообщение от Lesnik Посмотреть сообщение
Какой же?
Ты читать пробовал документацию? Один управляет указателем ввода, другой - вывода. То, что в частном случае для определенных стримов и в определенной плюсовой библиотеке , это один и тот же указатель, не должно никого смущать.
0
06.06.2015, 13:32
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2015, 13:32

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Перемещение папок с файлами и подкаталогов с файлами
как сделать чтобы кликнув по кнопке на форме папка со всеми ее подкаталогами и файлами...

почему-то в папке windows вместе с системными файлами, находится папка windows с теми же файлами! Копия, короче
Ребята, а у меня почему-то в папке windows вместе с системными файлами, находится папка windows с...

Переделать работу с текстовыми файлами под работу с двоичными файлами
Здравствуйте. В этой программе идёт работа с текстовыми файлами, а нужно с двоичными. Можно ли...

с файлами.
Дан файл f, элементы которого являются целыми числами. Никакой из элементов файла не равен нулю....


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.