Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Мигрень
20 / 20 / 2
Регистрация: 09.11.2010
Сообщений: 102
#1

Указатели в файлах прямого доступа - C++

12.04.2011, 01:13. Просмотров 767. Ответов 3
Метки нет (Все метки)

Доброго времени суток

имею следующее:
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
     FILE *fp;
     int m[10]={1,2,3,4,5,6,7,8,9,10};
     long int g;
 
  if((fp=fopen("test", "wb+"))==NULL) {
    printf("Ошибка при открытии файла.\n");
    exit(1);
  }
  for(int i = 0; i<10;i++)
  {
      fwrite(&m[i], sizeof(int), 1, fp);
  }
  rewind(fp);
 
    for(int i = 0; i<10;i++)
  {
      //if(i==4) {
         // g=ftell(fp);
         // fseek(fp, g, SEEK_SET);
      //}
      fread(&m[i], sizeof(int), 1, fp);
      cout << m[i] << "\n";
  }
  fclose(fp);
в результате на консоль получаю "1 2 3 4 5 6 7 8 9 10"
Никак не могу добиться смещения указателя, чтобы например вывело "1 2 3 4 5 1 2 3 4 5"

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

Буду благодарен если кто направит на путь истинный и подскажет как правильно использовать fseek на пару с ftell

Добавлено через 17 минут
при этом потом вернуть указатель в конец этих чисел для возможности дозаписи новых
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2011, 01:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатели в файлах прямого доступа (C++):

Таблицы прямого доступа в С++ - C++
Здравствуйте ! Нужно разобраться с таблицами прямого доступа . После прочтения теории я понял немногое: например , вот мы создаём массив...

Линейный список прямого доступа в связанной памяти - C++
Здравствуйте!Помогите пожалуйста. Не могу понять как сделать чтобы все заданные элементы не удалялись. Задание: Удалить последний по...

Пустые указатели (ошибка доступа) - C++
Здравствуйте, пишу простенький фрамеворк для загрузки текстур для того чтобы добавить эти текстуры в игру. Существует Класс Load -&gt;...

Стек через указатели — ошибка доступа - C++
Задача такова: реализовать стек, в котором будут такие команды — push (добавить в конец элемент), pop (удалить последний элемент), back...

Нечетные элементы массива отсортировать методом пузырька, а четные методом прямого доступа - C++
Дан одномерный массив, в нем нечетные элементы отсортировать методом пузырька, а четные методом прямого доступа(или прямого включения, могу...

Нарушение прав доступа при чтении по адресу, указатели - C++
Доброго времени суток, дорогие форумчане! Проблема в следующем: мне дано было задание сделать игру Го(кто не знает это что-то вроде...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CEBEP
106 / 106 / 9
Регистрация: 21.03.2010
Сообщений: 440
12.04.2011, 01:39 #2
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
#include <stdio.h>
#include<iostream>
int main()
{
         FILE *fp;
         int m[10]={1,2,3,4,5,6,7,8,9,10};
         long int g;
 
  if((fp=fopen("test", "wb+"))==NULL) {
    printf("Ошибка при открытии файла.\n");
          return -1;
  }
  fwrite(m,sizeof(int),5,fp);
  fwrite(m,sizeof(int),5,fp);
  rewind(fp);
 
    for(int i = 0; i<10;i++)
  {
          //if(i==4) {
                 // g=ftell(fp);
                 // fseek(fp, g, SEEK_SET);
          //}
          fread(&m[i], sizeof(int), 1, fp);
          std::cout << m[i] << "\n";
  }
  fclose(fp);
  return 0;
}
или я что-то не понял?
0
Мигрень
20 / 20 / 2
Регистрация: 09.11.2010
Сообщений: 102
12.04.2011, 17:48  [ТС] #3
мне нужно, чтобі при считывании 10ти чисел указатель после 7го числа, например, вернулся на 5е и начал опять считывать с 5го числа
0
CEBEP
106 / 106 / 9
Регистрация: 21.03.2010
Сообщений: 440
12.04.2011, 20:35 #4
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
#include <iostream>
#include <cstdio>
int main(void)
{
         FILE *fp;
         int m[10]={1,2,3,4,5,6,7,8,9,10};
         long int g;
 
  if((fp=fopen("test", "wb+"))==NULL) {
    printf("Ошибка при открытии файла.\n");
    exit(1);
  }
  for(int i = 0; i<10;i++)
  {
          fwrite(&m[i], sizeof(int), 1, fp);
  }
  rewind(fp);
 
  /*мне нужно, чтобі при считывании 10ти чисел указатель после 7го числа, например, вернулся на 5е и начал опять считывать с 5го числа*/
  fread(m, sizeof(int), 7, fp);
  fseek(fp,4 * sizeof(int),0);
  fread(m + 7, sizeof(int), 3, fp);
 
  for(int i = 0; i < 10; ++i) 
    std::cout << m[i] << "\n";
 
  fclose(fp);
}
в качестве 3 аргумента fseek принимает число указывающее откуда будет отсчитываться число байт указанное во 2 аргументе.
0 == SEEK_SET Начало файла
1 == SEEK_CUR Текущая позиция указателя
2 == SEEK_END Конец файла
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2011, 20:35
Привет! Вот еще темы с ответами:

Почему обращение к методам осуществляется через оператор прямого доступа, а не через оператор указателей->? - C++
#include &lt;iostream&gt; using namespace std; class random { public: void Set(int b){a=b;} int Get(){return a;} private: ...

Указатели и указатели на указатели, а также типы данных - C++
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

Через указатели на указатели посчитать сумму двух чисел и записать в третье - C++
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...

Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной - C++
Мой код. #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include&lt;iomanip&gt; using namespace std; void min_max(int*pa, int*pb,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.04.2011, 20:35
Ответ Создать тему
Опции темы

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