Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 1
Регистрация: 13.02.2017
Сообщений: 7
1

Непонятка при работе с файлом

03.03.2017, 19:05. Показов 909. Ответов 8
Метки нет (Все метки)

Есть проблема при работе с файлом.
Нужно удалить гласные из текстового файла.
Непонятно, почему без file.seekg(pos) он зацикливается ;
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
#include "iostream"
#include "iomanip"
#include "vector"
#include "string"
#include "fstream"
#include "sstream"
using namespace std;
bool IsVowel(char ch) {
    static const string letters = "aeiouAEIOU";
    for (int i = 0; i < 10; ++i)
        if (ch == letters[i]) return true;
    return false;
}
int main()
{
    fstream file{ "text_in.txt" };
    if (!file)
        cout << "ERROR";
    for (char ch; file >> ch;) {
        if (IsVowel(ch)) {// seekg and seekp in fstream identical
            int pos = file.tellg();
            file.seekp(pos - 1);
            file << char(32);
            cout << file.tellg()<<" "<<file.tellp()<<'\n';
            file.seekg(pos);//without this isn't working
            cout << file.tellg() << " " << file.tellp() << '\n';
            cout << "--------------------------------------------\n";
        }
    }
    system("pause");
    return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2017, 19:05
Ответы с готовыми решениями:

Ошибка при работе с файлом
Пытался разобраться с записью и чтением из файла, посмотрел с десяток тем здесь, но столкнулся со...

Неправильный вывод при работе с файлом
Возникла непонятка при выводе на экран текстового файла. У меня имеется файл с последовательностью...

Синхронизация потоков при работе с файлом
Доброго времени суток! У меня такая проблема: многопоточные приложения я не писал ни разу, но,...

Вывод содержимого при работе с файлом
Есть программа для работы с файлом. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace...

8
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
03.03.2017, 19:12 2
А по числам что видно?
0
1 / 1 / 1
Регистрация: 13.02.2017
Сообщений: 7
03.03.2017, 19:19  [ТС] 3
Для файла с "Once upon a time".Видно что позиция до и после присвоения одинаковая.
1 1
1 1
--------------------------------------------
4 4
4 4
--------------------------------------------
6 6
6 6
--------------------------------------------
8 8
8 8
--------------------------------------------
11 11
11 11
--------------------------------------------
14 14
14 14
--------------------------------------------
16 16
16 16
--------------------------------------------
18 18
18 18
--------------------------------------------
21 21
21 21
--------------------------------------------
23 23
23 23
--------------------------------------------
25 25
25 25
--------------------------------------------
28 28
28 28
--------------------------------------------
31 31
31 31
--------------------------------------------
33 33
33 33
--------------------------------------------
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
03.03.2017, 19:36 4
А откуда такие большие числа для совсем короткой фразы?
0
1 / 1 / 1
Регистрация: 13.02.2017
Сообщений: 7
03.03.2017, 19:39  [ТС] 5
Ошибся.
1 1
1 1
--------------------------------------------
4 4
4 4
--------------------------------------------
6 6
6 6
--------------------------------------------
8 8
8 8
--------------------------------------------
11 11
11 11
--------------------------------------------
14 14
14 14
--------------------------------------------
16 16
16 16
--------------------------------------------
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
03.03.2017, 19:59 6
У меня работает и без этой строки.
0
1 / 1 / 1
Регистрация: 13.02.2017
Сообщений: 7
03.03.2017, 20:02  [ТС] 7
А компилятор майкрософтовский?
0
nd2
3417 / 2797 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
03.03.2017, 20:30 8
Лучший ответ Сообщение было отмечено dod426 как решение

Решение

Цитата Сообщение от dod426 Посмотреть сообщение
А компилятор майкрософтовский?
Если используешь позиционирование курсора, то открывай файл в бинарном режиме. При переходе от записи к чтению, не забудь освободить буфер (flush()), чтобы данные попали в файл. При переходе от чтения к записи, нужно указать через seekp() куда записывать.
1
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
03.03.2017, 20:45 9
Да, действительно, без flush() после 23-й строки не работает. Недопилили что-то.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.03.2017, 20:45

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

Неправильно работает функция write при работе с файлом
Добрый день. Выполняю задачу по созданию файла с произвольным доступом и взаимодействию с ним....

Ошибка no matching function for call to при работе с файлом
возникает ошибка no matching function for call to 'getline(std::string&amp;, std::string&amp;)' ...

Почему выдает ошибку при работе с большим файлом, напишите как исправить ?
Помогите пожалуйста, данная программа берет текст из документа 1.txt ( если документ маленький то...


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

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

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