Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
 Аватар для Anastasia_Sail
1 / 1 / 0
Регистрация: 23.04.2017
Сообщений: 108

Считать из файла числа и занести в массив

17.03.2020, 19:52. Показов 7338. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Подскажите, как занести только числа, не учитывая пробелы (предполагаю, что какой-нибудь встроеной функции split нет?)
Код прилагаю
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
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
 
using namespace std;
 
void main(void)
{
    int N = 0; //размер
    int a[50][50];
 
    FILE* in = fopen("file_in.txt", "rt");//файл чтения
   // FILE* out = fopen("file_out.txt", "wt");//файл записи
    fscanf(in, "%d", &N); //Считали N
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            fscanf(in, "%d", &a[i][j]);
        }
    }
 
    for (int i = 0; i < N; i++) {
        for (int j = 0; i < N; j++) {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
 
    fclose(in);
   // fclose(out);
 
}
ЧИсла в файле выглядят примерно так
Code
1
2
3
4
5
6
7
1 4 5 10 11 7 5 8 4 6 4 7 11 10 11 3 1 2 6 7 3
2 4 5 10 11 7 5 8 4 6 4 7 11 10 11 3 1 2 6 7 3
3 4 5 10 11 7 5 8 4 6 4 7 11 10 11 3 1 2 6 7 3
4 4 5 10 11 7 5 8 4 6 4 7 11 10 11 3 1 2 6 7 3
5 4 5 10 11 7 5 8 4 6 4 7 11 10 11 3 1 2 6 7 3
6 4 5 10 11 7 5 8 4 6 4 7 11 10 11 3 1 2 6 7 3
7 4 5 10 11 7 5 8 4 6 4 7 11 10 11 3 1 2 6 7 3
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.03.2020, 19:52
Ответы с готовыми решениями:

Считать из файла слова и занести их в массив string-ов
Как считать слова из файла и занести их в массив типа string?

Считать данные с файла и занести их последовательно в двумерный массив
Здравствуйте. Возник следующий вопрос: мне нужно считать данные с файла и занести их последовательно в двумерный массив. При выводе уже...

Занести в массив числа из файла
Здравствуйте. Необходимо написать программу, которая будет брать четыре числа из файла (цифры через пробел) и заносить их в массив. Как...

17
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
17.03.2020, 20:24
Лучший ответ Сообщение было отмечено Anastasia_Sail как решение

Решение

если нужно прочитать файл в массив, сначала находите размер массива. примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    #include <fstream>
    #include <string>
    #include <sstream>
 
    int n=0, m=0;
    string line;
    ifstream in(input.txt);
    
    if (in.is_open()) 
    {
        while (getline(in,line)) 
        {             
            n++;
        }
        in.close();
        
        stringstream ss(line); 
        while (ss >> line) 
        {
            m++;
        }    
    }
    else cout << "Unable to open file\n";
затем объявляете динамический массив:
C++
1
2
3
    int **a = new int*[n]; 
    for (int i = 0; i < n; i++)
       a[i]=new int[m];
ещё раз открываете файл и читаете файл в массив:
C++
1
2
3
   for (int t i = 0; i < n; i++)   
       for (int j = 0; j < m; j++)
       in >> a[i][j];
1
 Аватар для Anastasia_Sail
1 / 1 / 0
Регистрация: 23.04.2017
Сообщений: 108
17.03.2020, 20:37  [ТС]
Спасибо=^-^=
а что если у меня вмести цифр эти значения "-842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451"
с чем это может быть связано?
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
17.03.2020, 20:38
Anastasia_Sail, показывайте код, который это выдаёт эти числа
0
 Аватар для Anastasia_Sail
1 / 1 / 0
Регистрация: 23.04.2017
Сообщений: 108
17.03.2020, 20:40  [ТС]
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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
 
int main() {
 
    int n = 0, m = 0;
    string line;
    ifstream in("C:\\file_in.txt");
 
    if (in.is_open()) {
        while (getline(in, line)) {
            n++;
        }
        in.close();
 
        stringstream ss(line);
        while (ss >> line) {
            m++;
        }
        cout << "good, open file" << endl;
    }
    else cout << "Unable to open file\n";
 
    cout << "size matrix --> " << n << " " << m << endl;
 
    int** a = new int* [n];
    for (int i = 0; i < n; i++)
        a[i] = new int[m];
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++)
            in >> a[i][j];
    }
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cout << a[i][j] << "  ";
        }
        cout << endl;
    }
 
 
    return 0;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
17.03.2020, 20:43
Anastasia_Sail, читайте внимательнее
Цитата Сообщение от Yetty Посмотреть сообщение
ещё раз открываете файл
Добавлено через 1 минуту
в конце не забудьте освободить память:
C++
1
2
3
    for (int i = 0; i < n; i++)
    delete[]a[i];
    delete[]a;
0
 Аватар для Anastasia_Sail
1 / 1 / 0
Регистрация: 23.04.2017
Сообщений: 108
17.03.2020, 21:07  [ТС]
Всё та же "ошибка", не могу понять, прошу прощения что так туплю, не подскажете мне, что не так?
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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
 
int main() {
 
    int n = 0, m = 0;
    string line;
    ifstream in("C:\\file_in.txt");
 
    if (in.is_open()) {
        cout << "good, open file" << endl;
 
        while (getline(in, line)) {
            n++;
        }
        in.close();
 
        stringstream ss(line);
        while (ss >> line) {
            m++;
        }
    }
    else cout << "Unable to open file\n";
    in.close();
 
    cout << "size matrix --> " << n << " " << m << endl;
 
    int** a = new int* [n];
    for (int i = 0; i < n; i++)
        a[i] = new int[m];
 
    ifstream in_("C:\\file_in.txt");
 
    if (in_.is_open()) {
        cout << "good, open file" << endl;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++)
                in_ >> a[i][j];
        } 
    }
    else cout << "Unable to open file\n";
    in_.close();
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cout << a[i][j] << "  ";
        }
        cout << endl;
    }   
 
    for (int i = 0; i < n; i++)
        delete[]a[i];
    delete[]a;
 
    return 0;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
17.03.2020, 21:12
Anastasia_Sail, размеры правильно определены ? зачем 2 раза закрыли ? строка 21 и 29
0
 Аватар для Anastasia_Sail
1 / 1 / 0
Регистрация: 23.04.2017
Сообщений: 108
17.03.2020, 21:13  [ТС]
Размеры - да, правильно
0
 Аватар для Anastasia_Sail
1 / 1 / 0
Регистрация: 23.04.2017
Сообщений: 108
17.03.2020, 21:18  [ТС]
Ну, грубо говоря...
Миниатюры
Считать из файла числа и занести в массив  
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
17.03.2020, 21:18
Anastasia_Sail, напишите код попроще (для проверки) - прочитать массив известного размера например 3x2
0
 Аватар для Anastasia_Sail
1 / 1 / 0
Регистрация: 23.04.2017
Сообщений: 108
17.03.2020, 21:20  [ТС]
Даже если изначально укажу размеры матрицы, которая в файле, так же выводит.
0
 Аватар для Anastasia_Sail
1 / 1 / 0
Регистрация: 23.04.2017
Сообщений: 108
17.03.2020, 21:23  [ТС]
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
int main() {
 
    int n = 2, m = 3;
    /*string line;
    ifstream in("C:\\file_in.txt");
 
    if (in.is_open()) {
        cout << "good, open file" << endl;
 
        while (getline(in, line)) {
            n++;
        }
        in.close();
 
        stringstream ss(line);
        while (ss >> line) {
            m++;
        }
    }
    else cout << "Unable to open file\n";*/
 
    cout << "size matrix --> " << n << " " << m << endl;
 
    int** a = new int* [n];
    for (int i = 0; i < n; i++)
        a[i] = new int[m];
 
    ifstream in_("C:\\file_in.txt");
 
    if (in_.is_open()) {
        cout << "good, open file" << endl;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++)
                in_ >> a[i][j];
        } 
    }
    else cout << "Unable to open file\n";
    in_.close();
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cout << a[i][j] << "  ";
        }
        cout << endl;
    }   
 
    for (int i = 0; i < n; i++)
        delete[]a[i];
    delete[]a;
 
    return 0;
}
Изображения
 
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
17.03.2020, 21:32
Anastasia_Sail, даже не знаю с чем связано, проверяю на строке - работает
Кликните здесь для просмотра всего текста
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
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <string>
using namespace std;
 
int main() {
 
    int n = 2, m = 3;    
 
    cout << "size matrix --> " << n << " " << m << endl;
 
    string str = "2 3 4 5 6 7";
    int** a = new int* [n];
    for (int i = 0; i < n; i++)
        a[i] = new int[m];
 
    //ifstream in_("C:\\file_in.txt");
    stringstream in_(str);
    //if (in_.is_open()) {
        cout << "good, open file" << endl;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++)
                in_ >> a[i][j];
        } 
    //}
    //else cout << "Unable to open file\n";
    //in_.close();
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cout << a[i][j] << "  ";
        }
        cout << endl;
    }   
 
    for (int i = 0; i < n; i++)
        delete[]a[i];
    delete[]a;
 
    return 0;
}
0
 Аватар для Anastasia_Sail
1 / 1 / 0
Регистрация: 23.04.2017
Сообщений: 108
17.03.2020, 21:44  [ТС]
Хм... жалко... не понимаю даже как это починить(
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
17.03.2020, 21:52
Anastasia_Sail, начинайте с простого. первое число читает ?
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
 
int main() 
{ 
    int num;
 
    ifstream in_("C:\\file_in.txt"); 
    
    in_ >> num;
   
    cout << num << "\n";    
 
return 0;
}
0
 Аватар для Anastasia_Sail
1 / 1 / 0
Регистрация: 23.04.2017
Сообщений: 108
17.03.2020, 21:53  [ТС]
Таким образом вроде даже работает, но первую строку никак не воспринимает...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 ifstream in_("C:\\file_in.txt");
    string line_;
 
    if (in_.is_open()) {
        cout << "good, open file" << endl;
        while (getline(in_, line_))
        {
            for (int i = 0; i < n; i++) {
                stringstream ss(line);
                while (ss >> line) {
                    for (int j = 0; j < m; j++) {
 
                        in_ >> a[i][j];
                    }
                }
            }
        }
    }
    else cout << "Unable to open file\n";
Миниатюры
Считать из файла числа и занести в массив  
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
18.03.2020, 01:35
Anastasia_Sail, Вы файл сами создаёте или у Вас он строго задан именно в таком формате? Если сами, то лучше записывать первыми числами данные о массиве:
4 3

1 2 3
4 5 6
7 8 9
10 11 12
Тогда не надо делать лишних расчётов, мудрить и что-то придумывать:
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
//#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <fstream>
 
using namespace std;
 
int main()
{
    int ROW = 0, COL = 0;   //ДАННЫЕ О ОСНОВНОМ МАССИВЕ
    int row = 0, col = 0;   //для индексации массива при заполнении 
 
    ifstream in("file_in.txt");//файл чтения
 
    in >> ROW;      //считываем данные о массиве
    in >> COL;
 
    int **arr = new int * [ROW];        //создаём массив, исходя из полученных сведений
    for (int i=0; i<ROW; i++) arr[i] = new int[COL];
 
 
    /*СЧИТЫВАЕМ ОСТАВШИЕСЯ ЧИСЛА*/
    while (!in.eof()){
        in >> arr[row][col];
 
        /*наращиваем индексы*/
        col++;
        if (col == COL){
            row++;
            col = 0;
        }
    }
 
    in.close();
 
 
    cout << "ARRAY:\n";
    for (int i=0; i<ROW; i++){
        for (int j=0; j<COL; j++){
            cout << arr[i][j] << '\t';
        }
        cout << '\n';
    }
 
 
 
 
    for (int i=0; i<ROW; i++) delete []arr[i];
    delete []arr;
 
}
Добавлено через 13 минут
Если задан в формате, то два прохода по файлу: первый считает число строк и парсит первую строку на количество чисел в ней, после чего создаётся массив, а второй проход служит для заполнения массива. Разница будет только в том, что так надо делать много лишних действий: два обхода одного и того же файла, парсинг одной строки, подсчёт строк.

Добавлено через 36 минут
А можно вот так:
Код отсюда: Как считать матрицу из файла в двумерный вектор
В файле только двумерный массив
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
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
//#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <sstream>
 
using namespace std;
 
int main()
{
    vector<vector<int>> v;
    string line;
    ifstream f("file_in.txt");
 
    while (getline(f, line)) {
       istringstream iss(line);
       v.push_back(vector<int>(istream_iterator<int>(iss), istream_iterator<int>()));
    }
 
    for (auto &i:v){
        for (auto &j:i){
            cout << j << '\t';
        }
        cout << '\n';
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.03.2020, 01:35
Помогаю со студенческими работами здесь

Занести числа из текстового файла в динамический массив
Задача такова: 1). Нужно считать числа с файла (*.txt). Пример файла: 39 45 50 47 102 53 86 53 ...

Считать числа из файла в массив
В файле записано неизвестное количество чисел. Нужно считать их в одномерный массив. #include&lt;stdio.h&gt; ...

Считать числа из файла в массив
Помогите мне сохранить числа, записанные в файле через пробел в 1 строку, в массив.(при том количество чисел неизвестно). Заранее...

Считать из файла числа в массив
здравствуйте. подскажите, как можно из подключенного текстового файла считать только числа (float) и занести их в массив (или список) так,...

Считать числа из файла и записать их в массив
Проблема следущая: нужна программа которая считывает числа типа double из файла (в моем случае это индексы валютного курса) и записывает их...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru