Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 27.05.2022
Сообщений: 143
1

Как поменять одно число в файле, не перезаписывая файл заново целиком?

15.12.2023, 23:09. Показов 549. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я хочу написать код, в котором содержимое массива бинарно добавляется в файл data.dat, затем пользователь вводит номер числа, которое он хочет заменить на 122, после чего 122 заменяет число, номер которого прислал пользователь, но при этом файл data.dat с нуля не перезаписывается. Вот мой код:

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include<fstream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
    double list[] = { 1,2,3,3223.23,-10.32,32 };
    double list2[6];
    double list3[6];
    ofstream f1("data.dat", ios::binary);
    if (f1.is_open())
    {
        f1.write((char*)&list[0],  10 * sizeof(double));
    }
    f1.close();
 
    ifstream f2("data.dat", ios::binary);
 
    if (f2.is_open())
    {
        f2.read((char*)&list2[0], 6 * sizeof(double));
    }
    f2.close();
    for (int i = 0;i < 6;i++)
    {
        cout << list2[i] << endl;
    }
    cout << endl;
 
 
    FILE* f3 = fopen("data.dat","w");
 
 
    int n;
    cout << "Напишите, какое по номеру число вы хотите заменить на 122? ";
    cin >> n;
 
 
 
    fseek(f3, sizeof(double)*(n-1), SEEK_CUR);
    
    double buffer[] = { 122 };
 
    fwrite(buffer, sizeof(double), 1, f3);
    fclose(f3);
 
    ifstream f4("data.dat", ios::binary);
 
    if (f4.is_open())
    {
        f4.read((char*)&list3[0], 6 * sizeof(double));
    }
    f4.close();
    for (int i = 0;i < 6;i++)
    {
        cout << list3[i] << endl;
    }
    cout << endl;
 
 
    system("pause");
}

Проблема заключается в том, что заменяется не только нужное число, но и остальные: те, что до него, на нули, а те, что после, на -9.25596e+61.


Пример вывода:

0
0
122
-9.25596e+61
-9.25596e+61
-9.25596e+61


Как сделать так, чтобы был нормальный вывод?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.12.2023, 23:09
Ответы с готовыми решениями:

Во входном файле записано целое число .В выходной файл выведите одно число – количество кругляшей в числе N
Однажды в просторах рунета появился следующий ребус: 157892 = 3 203516 = 2 ...

Любая строка целиком, содержащая в себе хотя бы одно число
Составьте, пожалуйста, регулярное выражение. Мне нужно чтоб, по нему находилась любая строка...

Если в файле есть одно трехзначное число, начинающееся цифрой 3, упорядочить файл по невозрастанию
Создать бинарный файл, содержащий натуральные числа, величина которых не превосходит 109, заполнив...

Как сохранять результаты, не перезаписывая файл?
Игра Пинг Понг. Сделал кнопку для создания и сохранения текстового файла, содержащего результат...

3
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
15.12.2023, 23:27 2
Лучший ответ Сообщение было отмечено Oleg Shamanikov как решение

Решение

"r+" используй.
0
Модератор
Эксперт С++
13702 / 10905 / 6472
Регистрация: 18.12.2011
Сообщений: 29,112
16.12.2023, 05:10 3
Oleg Shamanikov, а почему у Вас такая странная смесь
iostream методов и Сишного stdio.h ?

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
    fstream f3("data.dat",ios::binary|ios::read|ios::write);
    if(f3)
    {
       int n;
       cout << "Напишите, какое по номеру число вы хотите заменить на 122? ";
       cin >> n;
       f3.seekp(sizeof(double)*(n-1));
       double buffer[] = { 122 };
       f3.fwrite((char*)buffer, 1*sizeof(double));
       f3.close();
     }
0
1 / 1 / 0
Регистрация: 27.05.2022
Сообщений: 143
16.12.2023, 18:19  [ТС] 4
Я только начал изучать с++
0
16.12.2023, 18:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2023, 18:19
Помогаю со студенческими работами здесь

Как умножить все числа в текстовом файле на одно число?
C# Windows Forms. Привет. У меня имеется текстовый файл, в котором написаны не только числа, но и...

Как в pandas добавить запись в excel файл не перезаписывая его?
Я использую pandas для записи в файл Excel. Если использовать mode='a' то выскакивает ошибка....

Типизированный файл: Поменять местами последнее положительное число в файле с пятым по счету числом
Здравствуйте,помогите пожалуйста с задачей:Создать типизированный файл, куда записать n...

Типизированный файл: Поменять местами последнее отрицательное число в файле с седьмым по счету числом
помогите с задачей. Создать типизированный файл, куда записать n вещественных чисел. Поменять...

Можно ли в файле в последовательность чисел вставить как-нибудь еще одно число?
вопрос: можно ли в файле в последовательность чисел вставить как-нибудь еще одно число стандартными...

Записать в файл copy2.txt информацию о запущенных процессах, при этом не удаляя содержимое файла(не перезаписывая файл)
. То есть вначале файла должна располагаться информация о настройках IP-протокола, а ниже список...

Файл: Как поменять местами строки так, чтобы в первом файле и во втором они совпадали?
У меня есть два файла, в них записаны данные, в оба файлов такие же ид , но не совпадают строки с...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru