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

Чтение из файла в Матрицу - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа работы с файлом, отображенным в память http://www.cyberforum.ru/cpp-beginners/thread1139846.html
у меня есть проблемка, дана программа в методичке, нужно откомпилировать, я питался что-то сделать, но выскакует одна ошибка, прошу вашей помощи!!!Пожалуйста! вот методичка(лаба 4) и скрин ошибки. //#include "EvryThng.h" //#include "Everything.h" #define BUF_SIZE 160
C++ Почему не работает наследование? Пытаюсь присвоить полям производного класса поля базового,но выводит мусор. В чем проблема? #include "stdafx.h" #include <iostream> #include <cstring> #include <cstdio> #include <cmath> using namespace std; http://www.cyberforum.ru/cpp-beginners/thread1139838.html
Error C3861 delete_list идентификатор не найден C++
Помогите разобраться с ошибкой, ругается на delete_list(&tail); #include "stdafx.h" #include <iostream> using namespace std; #include <conio.h> struct list2 { char name_nach; char name_konech;
C++ Error C2440 невозможно преобразовать char в char
двунаправленный список помогите разобраться с ошибкой #include "stdafx.h" #include <iostream> using namespace std; #include <conio.h> struct list2 { char name_nach;
C++ Написать программу мониторинга объявлений с сайта ati.su http://www.cyberforum.ru/cpp-beginners/thread1139819.html
Здравствуйте! я хочу попробовать написать программу мониторинга объявлений с сайта ati.su с внедрением antigate . Подскажите пожалуйста как и в чем это лучше исполнить. В программировании по нулям.
C++ Передать инициализированный std::vector конструктору базового класса В общем появилась одна проблема. Никак не пойму как можно сделать. В общем дело такое: 1) Есть класс Coord, который содержит координаты. #ifndef COORD_H #define COORD_H class Coord { public: Coord(int, int); int getX(){return x;} подробнее

Показать сообщение отдельно
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
06.04.2014, 01:53  [ТС]     Чтение из файла в Матрицу
По поводу
Цитата Сообщение от alsav22 Посмотреть сообщение
Для того, чтобы можно было вернуться назад в файле, запоминайте позицию возврата (tellg()), перед движением вперёд, потом возвращайте, в эту позицию, курсор (seekg()).
Точно не понял как их применить.

Пока вроде, что-то типо нужного варианта с "вперед" есть результат.
накидал пример для тестов:
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
64
65
66
67
68
69
70
71
72
73
74
75
76
void Step(int& n, int &m)
{
    //  system("cls");
    std::ifstream in("out.txt");
    if (!in.is_open())
    {
        std::cout << " Файл " << "out.txt" << " не был открыт для чтения. ";
        return;
    }
    int len;
    double **A2 = new double *[n], *B2 = new double[n]; //инициализация динамических массивов
    for (int i = 0; i < n; i++)
        A2[i] = new double[m];
 
    while (true)
    {
        char command;
        cout << " Введите команду: "; cin >> command;
        system("cls");
 
 
        switch (command)
        {
        case '>':
            len=in.tellg();
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    in >> A2[i][j];
                }
                in >> B2[i];
 
            }
            DisplayMatrix(A2, B2, n, m);
            in.ignore(462, '\n');
            break;
        case '<':
 
        in.seekg(len,'\n'); //in.seekg(len);
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    in >> A2[i][j];
                }
                in >> B2[i];
 
            }
            DisplayMatrix(A2, B2, n, m);
            break;
        case 's':
            //  SaveToFile();
            cout << "\nПроизведено сохранение всех шагов сортировки в файл output.txt\n" << endl;
            //getch();
            break;
        case 'e':
            return;
        }
 
 
        /*
        for (int i = 0; i < n; i++)
        {
        for (int j = 0; j < m; j++)
        {
        in >> A2[i][j];
        }
        in >> B2[i];
 
        }
        DisplayMatrix(A2, B2, n, m);*/
        
    }
    in.close();
}


seekg(pos) – устанавливает расстояние (в байтах) от начала файла до файлового указателя (т.е. устанавливает текущую позицию чтения в значение pos);

seekg (pos, seek_dir) – перемещает текущую позицию чтения на pos байтов, считая от одной из трех позиций, определяемых параметром seek_dir: ios::beg (от начала файла), ios::cur (от текущей позиции), ios::end (от конца файла);
tellg() – возвращает позицию (в байтах) указателя файла от начала файла.

tellg(pos) – возвращает позицию (в байтах) указателя файла от начала файла.

Добавлено через 32 минуты
Пытаюсь сделать типо так:
кусок кода:
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
64
65
66
67
68
69
70
ios::pos_type p;
//или
streampos pos;
 
void Step(int& n, int &m)
{
    //  system("cls");
    std::ifstream in("out.txt");
    if (!in.is_open())
    {
        std::cout << " Файл " << "out.txt" << " не был открыт для чтения. ";
        return;
    }
    int len;
    double **A2 = new double *[n], *B2 = new double[n]; //инициализация динамических массивов
    for (int i = 0; i < n; i++)
        A2[i] = new double[m];
 
    while (true)
    {
        char command;
        cout << " Введите команду: "; cin >> command; // вводим > появляется первая матрица
        system("cls");
 
 
        switch (command)
        {
        case '>':
 
            //p = in.tellg();//запоминаем текущую позицию
        pos = in.tellg(); //запоминаем текущую позицию
        cout << " Текущая позиция "<< pos << endl;
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    in >> A2[i][j];
                }
                in >> B2[i];
 
            }
            DisplayMatrix(A2, B2, n, m);
            in.ignore(462, '\n'); // как вывели первую матрицу, сразу игнорим первую строку, после нажатия > появляется читается следующая строка и т.д.
            break;
        case '<':
            cout << " Текущая позиция " << pos << endl;
            in.seekg(pos); // по идеи чтение должно начаться с запомненной позиции. Но пока к сожалению нет...
 
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    in >> A2[i][j];
                }
                in >> B2[i];
 
            }
            DisplayMatrix(A2, B2, n, m);
            break;
        case 's':
            //  SaveToFile();
            cout << "\nПроизведено сохранение всех шагов сортировки в файл output.txt\n" << endl;
            //getch();
            break;
        case 'e':
            return;
        }
    }
    in.close();
}
Получается, даже если все запоминаться будет, то можно будет вернутся только на 1 прошлый шаг. т.к. при каждом шаге, новая позиция...

Добавлено через 26 минут
ВОт так начинает что-то да крутится туда-сюда, правда не правильные цифры выдает при обратном ходе.
C++
1
pos = in.tellg()/sizeof(int);
 
Текущее время: 09:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru