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

Чтение из файла массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
02.10.2012, 16:10     Чтение из файла массива #1
Пожалуйста помогите разобрать чтение двумерного масиива из файла(не могу найти чтото понятное(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2012, 16:10     Чтение из файла массива
Посмотрите здесь:

C++ Чтение массива из файла
быстрое чтение массива из файла C++
чтение массива структуры из файла C++
C++ Чтение массива из файла
Чтение массива из файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Andsteadur
152 / 136 / 3
Регистрация: 23.05.2009
Сообщений: 275
02.10.2012, 16:11     Чтение из файла массива #2
Как хранятся данные в файле? В двоичном виде или в текстовом? Что за данные вообще?
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
02.10.2012, 16:29     Чтение из файла массива #3
Что конкретно не понятно?

Добавлено через 5 минут
Вот пример
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
#include <iostream>
#include <iomanip>
#include <fstream> 
 
int main() 
{ 
    const int size = 3; 
    int matrix[size][size]; 
    int i = 0, j = 0;  
 
    std::ifstream infile; 
    infile.open("Text.txt");
 
    
    while(infile >> matrix[i][j++])  
    {
        if(j == size) 
        { 
            j = 0; 
            i++; 
        } 
    }
        
 
        for ( i = 0; i < size; i++) 
            for ( j = 0; j < size; j++) 
            { 
                if( j % size == 0) 
                    std::cout << std::endl; 
                std::cout <<std::setw(3) << matrix[i][j]; 
            } 
    
    std::cout << std::endl; 
    infile.close(); 
}
Text.exe
11 22 33
44 55 66
77 88 99
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
02.10.2012, 16:42  [ТС]     Чтение из файла массива #4
Числа...как я понимаю...таким образом мы выводим просто потоком...
C++
1
2
3
4
5
6
7
8
9
10
11
12
int _tmain(int argc, _TCHAR* argv[])
{
    ifstream f("f.txt");
    int v;
    while (!f.eof())
    {
        f>>v;
        cout<<v<<endl;
    }
    getch();
    return 0;
}
С массивом с одномерным массивом это уже не срабатывает(
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int _tmain(int argc, _TCHAR* argv[])
{
    ifstream f("f.txt");
    //int v;
    int *mas;
    
        //f>>v;
        for(int i=0;f.eof();i++)
        {
            f>>mas[i];
            cout<<mas[i]<" ";
         }
    getch();
    return 0;
}
как исправить одномерный и сделать с двумерным?
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
02.10.2012, 16:45     Чтение из файла массива #5
Посмотрите в мой пример, там показано как считывать в матрицу.
Andsteadur
152 / 136 / 3
Регистрация: 23.05.2009
Сообщений: 275
02.10.2012, 16:46     Чтение из файла массива #6
сначала создайте массив, а потом читайте в него. Это же объявление указателя, который указывает черт знает куда:
C++
1
int *mas;
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
02.10.2012, 17:00  [ТС]     Чтение из файла массива #7
Цитата Сообщение от David Sylva Посмотреть сообщение
Что конкретно не понятно?

Добавлено через 5 минут
Вот пример
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
#include <iostream>
#include <iomanip>
#include <fstream> 
 
int main() 
{ 
    const int size = 3; 
    int matrix[size][size]; 
    int i = 0, j = 0;  
 
    std::ifstream infile; 
    infile.open("Text.txt");
 
    
    while(infile >> matrix[i][j++])  
    {
        if(j == size) 
        { 
            j = 0; 
            i++; 
        } 
    }
        
 
        for ( i = 0; i < size; i++) 
            for ( j = 0; j < size; j++) 
            { 
                if( j % size == 0) 
                    std::cout << std::endl; 
                std::cout <<std::setw(3) << matrix[i][j]; 
            } 
    
    std::cout << std::endl; 
    infile.close(); 
}
Text.exe
11 22 33
44 55 66
77 88 99
Спасибо а как сделать так чтобы он был динамический?

Добавлено через 6 минут
Цитата Сообщение от Andsteadur Посмотреть сообщение
сначала создайте массив, а потом читайте в него. Это же объявление указателя, который указывает черт знает куда:
C++
1
int *mas;
Так?
C++
1
2
3
matrix=new int *[size];
      for (int i=0;i<size;i++)
        *(matrix+i)= new int [size];
но как узнать размер?
Andsteadur
152 / 136 / 3
Регистрация: 23.05.2009
Сообщений: 275
02.10.2012, 17:07     Чтение из файла массива #8
одномерный:
C++
1
int *matrix = new int[size];
двумерный:
C++
1
2
3
int **matrix=new int *[size];
      for (int i=0;i<size;i++)
        matrix[i]= new int [size];
Добавлено через 1 минуту
Размер обычно нужно передавать в файле. Либо спрашивать у пользователя сколько ему нужно считать. Либо использовать контейнер
Петррр
 Аватар для Петррр
5915 / 3352 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
02.10.2012, 17:09     Чтение из файла массива #9
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
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <iterator>
#include <vector>
#include <algorithm>
 
int main()
{
    const char *fileName = "E:\\1.txt";
    std::vector< std::vector<int> > vec;
    std::ifstream ifs(fileName);
    if (ifs.is_open())
    {
        std::string buf;
        while (std::getline(ifs, buf, '\n'))
        {
            std::istringstream stream_buf(buf);
            std::vector<int> vec_buf(
                (std::istream_iterator<int>(stream_buf)),
                (std::istream_iterator<int>()));
            vec.push_back(vec_buf);
        }
        ifs.close();
        int rows = vec.size();
        for(int i = 0; i < rows; i++)
        {
            std::copy(vec[i].begin(), vec[i].end(), std::ostream_iterator<int>(std::cout, " "));
            std::cout << std::endl;
        }
    }
}
Только каждая строка массива может быть разной длины.
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
02.10.2012, 17:09     Чтение из файла массива #10
Цитата Сообщение от Andsteadur Посмотреть сообщение
размер обычно нужно передавать в файле. по другому никак. или использовать контейнеры
Верное замечание
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
02.10.2012, 17:20  [ТС]     Чтение из файла массива #11
Цитата Сообщение от Петррр Посмотреть сообщение
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
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <iterator>
#include <vector>
#include <algorithm>
 
int main()
{
    const char *fileName = "E:\\1.txt";
    std::vector< std::vector<int> > vec;
    std::ifstream ifs(fileName);
    if (ifs.is_open())
    {
        std::string buf;
        while (std::getline(ifs, buf, '\n'))
        {
            std::istringstream stream_buf(buf);
            std::vector<int> vec_buf(
                (std::istream_iterator<int>(stream_buf)),
                (std::istream_iterator<int>()));
            vec.push_back(vec_buf);
        }
        ifs.close();
        int rows = vec.size();
        for(int i = 0; i < rows; i++)
        {
            std::copy(vec[i].begin(), vec[i].end(), std::ostream_iterator<int>(std::cout, " "));
            std::cout << std::endl;
        }
    }
}
Только каждая строка массива может быть разной длины.
это для одномерного массива?
Петррр
 Аватар для Петррр
5915 / 3352 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
02.10.2012, 17:24     Чтение из файла массива #12
Цитата Сообщение от yuliyayuliya28 Посмотреть сообщение
чтение двумерного масcива из файла
Разве задание не такое был?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2012, 17:45     Чтение из файла массива
Еще ссылки по теме:

Чтение и вывод массива из файла C++
Чтение массива из файла C++
Чтение массива из файла C++

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

Или воспользуйтесь поиском по форуму:
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
02.10.2012, 17:45  [ТС]     Чтение из файла массива #13
Цитата Сообщение от Петррр Посмотреть сообщение
Разве задание не такое был?
а как для двумервного?
Yandex
Объявления
02.10.2012, 17:45     Чтение из файла массива
Ответ Создать тему
Опции темы

Текущее время: 16:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru