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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2015, 20:56   #41
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

А как корректно записать число, ну или строку 2551 в файл, в позицию 20? Точнее в строку номер 20
Код:
#include <fstream>
#include <iostream>

using namespace std;
int main()
{  int count=0;

    cout<<"Print count std: ";
    cin>>count;
    cin.ignore();

    ofstream *my_file ;
    my_file= new ofstream("d://file.txt");

    for (int i(1);i<=count;i++)
     *my_file<<i<<endl;

   my_file->seekp(20);
   *my_file<<255l;

   
    my_file->close();

    delete my_file;
    return 0;
}
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 14.08.2015, 21:05   #42
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Такого понятия, как строки, в файлах нету.

Файл - это последовательность байт.

Чтоб был переход на следующую строку, запишите в файл "\r\n", это будут 2 байта:

0x0D ("\r") - возврат каретки
0x0A ("\n") - новая строка

Для этого можно просто использовать:

my_file << endl;
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).

Последний раз редактировалось Krasiosoft; 14.08.2015 в 21:12.
Krasiosoft вне форума Ответить с цитированием
Старый 14.08.2015, 21:16   #43
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

нет, вы не поняли, я про то, как узнать позицию байта в файле, с которого у нас начинается число 5 и заменить его на что-нибудь, например на 2551

вот допустим цикл от 1 до 8, в файле будет

1
2
3
4
5
6
7
8

как узнать где находится число 5, и заменить его на 2551? Вот то, что у меня написано в коде-я это пытался реализовать используя seekp.

Кст, почему-то кажется, что каретку не обязательно писать, можно и так

Код:
*my_file<<i<<"\n";
все равно будет переход.

Если разбираться в мелочах, то и cin.ignore(); можно как-нибудь заменить?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 14.08.2015, 21:23   #44
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Просто так заменить число в файле не получится, для этого нужно будет сместить все содержимое файла и только тогда вставить нужное число.

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

Представьте, что файл, это массив байт, как Вы сможете туда что-то вставить?

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
как узнать позицию байта в файле, с которого у нас начинается число
Если все числа в файле будут содержать одинаковое количество цифр, тогда это можно посчитать. Иначе нужно будет считывать все по одному числу, и считать на каком числе мы находимся, если это будет 5-е число, тогда в эту позицию и записывать (но при этом нужно учитывать, чтоб новое число содержало столько же цифр, как и было у старого).
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).

Последний раз редактировалось Krasiosoft; 14.08.2015 в 21:37.
Krasiosoft вне форума Ответить с цитированием
Старый 14.08.2015, 21:32   #45
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Хорошо, спасибо, теперь разобрался.

А используя seekg у ifstream - в качестве параметров указывается номер байта откуда нужно считывать? Тогда правильнее будет колдовать с sizeOf и Seekg, дабы считать нужное число с нужной позиции, но это слишком геморно, может есть вариант проще?

Есть ли какие-нибудь плюсы в работе

В общем, плюсы от использования * в ofstream я не разглядел, но второй вариант выглядит лучше, поэтому буду им пользоваться. Помимо красоты - в чем еще плюсы?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 14.08.2015, 21:40   #46
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
А используя seekg у ifstream - в качестве параметров указывается номер байта откуда нужно считывать?
Да.

И Вы далеко не понимаете, что такое указатели...

Это то же самое, что справить какие плюсы у:

int a;

и

int *a;
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).

Последний раз редактировалось Krasiosoft; 14.08.2015 в 21:42.
Krasiosoft вне форума Ответить с цитированием
Старый 19.08.2015, 05:28   #47
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ребят, а вот например, в каких случаях без указателей ну просто никак?

Например вернуть из метода класса или функции много значений разных типов, а еще?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 19.08.2015, 05:43   #48
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
в каких случаях без указателей ну просто никак?
Динамическое выделение памяти под что-либо.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 19.08.2015, 06:08   #49
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ну, к примеру, вот указатели...
Код:
   int num; // размер массива
    cout << "Enter integer value: ";
    cin >> num; // получение от пользователя размера массива

    int *p_darr = new int[num];
А не проще ли? ...
Итог ведь один и тот же.

Код:
Int num;
Cin>>num;
Int array[num];
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 19.08.2015, 06:13   #50
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Вообще, кажется лучше будет использовать связанные списки, потому что память там действительно выделяется под каждой новый элемент в динамическом порядке, а вот в примере выше в обоих случаях заранее указывается.

Правда недостаток списков в том, что нет индексации как в массиве
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
указатели salmon172 Паскаль, Turbo Pascal, PascalABC.NET 0 31.05.2011 21:34
указатели Артэс Общие вопросы C/C++ 4 07.09.2010 11:08
Указатели Анютик_sexi Помощь студентам 3 16.06.2010 14:38
Указатели AquaticSoul Общие вопросы C/C++ 5 22.12.2009 15:13
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39