Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2018, 22:06   #1
мукеьфт3
Новичок
Джуниор
 
Регистрация: 25.08.2018
Сообщений: 1
По умолчанию Проблема с вставкой числа в текстовый файл

Начал изучать чтение из файла и добавление туда строк и чисел. В книге есть такой пример, который у меня криво работает. Есть файл со списком рекордов, идущих по убыванию, нужно вставить новый в соответствующее ему место:

Код:
#include <fstream>
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    fstream file("highscores.txt",ios::in | ios::out);

    if (! file.is_open())
    {
        cout << "Could not open the file";
        return 0;
    }
    int new_high_score;
    cout << "Enter a new high score : ";
    cin >> new_high_score;
    streampos pre_score_pos = file.tellg();
    int cur_score;
    while (file >> cur_score)
    {
        if (new_high_score > cur_score)
        {
            break;
        }
        pre_score_pos = file.tellg();
    }
    if (file.fail() && !file.eof())
    {
        cout << "Some bad inputs";
        return 0;
    }
    file.clear();
    file.seekg(pre_score_pos);
    vector<int> scores;
    while (file >> cur_score)
    {
        scores.push_back(cur_score);
    }
    if (!file.eof())
    {
        cout<< "Some bad inputs";
        return 0;
    }
    file.clear();
    file.seekp(pre_score_pos);
    if (pre_score_pos != 0)
    {
        file << endl;
    }
    file << new_high_score << endl;
    for (vector<int>::iterator itr = scores.begin(); itr != scores.end(); ++itr)
    {
        file << *itr << endl;
    }
}

Есть текстовый файл с рекордами:
100
88
76
71
65
51
47
34
27
19
6
Указываю новый рекорд, например - 70. Программа разбивает число 71 и вставляет новый рекорд(70) между этими цифрами. Если число 61, то он разбивает число 47, и вставляет туда 61. Нашел в интернете вопрос про этот же код, там кто-то написал, что в учебнике ошибка, когда сохраняешь позицию pre_score_pos = file.tellg(); указатель уже успел убежать и надо его вернуть назад. Не подскажете, как исправить код, и если дело в убежавшем указателе, то как вернуть его назад?

Последний раз редактировалось Alex11223; 25.08.2018 в 23:11.
мукеьфт3 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан текстовый файл input.txt, в котором хранятся целые числа Анна997 Общие вопросы Delphi 9 27.09.2016 14:28
Даны вещественные числа A, B и целое число N. Создать текстовый файл, содержащий таблицу значений функции mm00 Помощь студентам 0 03.03.2014 22:10
Создать текстовый файл, строки которого содержат целые числа. Обработать файл следующим образом: напечатать все отрицательные числ Anton94.by Паскаль, Turbo Pascal, PascalABC.NET 3 29.02.2012 17:30
Создать текстовый файл, строки которого содержат целые числа. Обработать файл следующим образом: напечатать все отрицательные... Anton94.by Паскаль, Turbo Pascal, PascalABC.NET 2 08.02.2012 19:23