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

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

Войти
Регистрация
Восстановить пароль
 
virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
#1

не правильно заполняется массив - C++

25.01.2014, 10:41. Просмотров 356. Ответов 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include<iostream>
#include<fstream>
using namespace std;
 
 
int main()
{
    int i,k,n,m,j,l;
    k = 0;
    l = 2;
    int mas[100];
    ifstream f("C:\\mipt1\\input.txt");
    for (i = 0; !f.eof(); i++)
    {
        f >> mas[i];
        k++;
    }
 
    m = mas[0];
    n = mas[1];
    int** mass = new int*[m];
        for (i = 0; i < n; i++)
            mass[i] = new int[n];
 
        for (i = 0; i < m; i++)
        {
            for (j = 0; j < n; j++)
            {
 
                mass[i][j] = mas[l];
                
                l++;
            }
 
        }
 
 
 
 
        for (i = 0; i < m; i++)
        {
            for (j = 0; j < n; j++)
                cout << mass[i][j] << "\n";
        }
        
        
 
 
        system("pause");
    
}




в файле хранится
m n
а дальше числа хранящиеся в массиве m*n
когда я вывожу динамический массив он выводит все что в файле, плюс выводит еще несколько чисел виа -848190 тоесть вот таких болших, если массив 4*4 то он в конце выведет еще 4 таких числа, в чем проблема?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6187 / 5790 / 1875
Регистрация: 18.12.2011
Сообщений: 14,790
Завершенные тесты: 1
25.01.2014, 11:05     не правильно заполняется массив #2
В принципе, массив mass должен формироваться правильно.
Единственное, что надо отметить:
k будет на 1 больше, чем надо,
т.к. лишний раз увеличится при чтении конца файла.
MrGluck
Ворчун
Эксперт CЭксперт С++
6409 / 3607 / 448
Регистрация: 29.11.2010
Сообщений: 9,532
25.01.2014, 11:06     не правильно заполняется массив #3
Цитата Сообщение от virtuos553 Посмотреть сообщение
int** mass = new int*[m];
* * * * for (i = 0; i < n; i++)
все же
for (i = 0; i < m; i++)

Добавлено через 16 секунд
22 строка
Tulosba
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.01.2014, 11:08     не правильно заполняется массив #4
MrGluck, в код не вглядывался, но даже если m и n спутаны, то ошибка где-то еще.
Иначе бы ТС не жаловался на такое:
Цитата Сообщение от virtuos553 Посмотреть сообщение
если массив 4*4 то он в конце выведет еще 4 таких числа
MrGluck
Ворчун
Эксперт CЭксперт С++
6409 / 3607 / 448
Регистрация: 29.11.2010
Сообщений: 9,532
25.01.2014, 11:13     не правильно заполняется массив #5
ну так там косяк возможен еще с тем, что он в новый динамический массив пихает зачем-то значения с другого
Цитата Сообщение от virtuos553 Посмотреть сообщение
mass[i][j] = mas[l];
вместо того чтобы по нормальному сначала считать размеры двух размерностей, выделить память, а потом в цикле считать в динамический массив переменные.

Добавлено через 1 минуту
например mas[0] и mas[1] вообще используются не для хранения элементов массива, однако в новый массив войдут.
zss
Модератор
Эксперт С++
6187 / 5790 / 1875
Регистрация: 18.12.2011
Сообщений: 14,790
Завершенные тесты: 1
25.01.2014, 11:20     не правильно заполняется массив #6
Цитата Сообщение от MrGluck Посмотреть сообщение
однако в новый массив войдут.
НЕ войдут
Переменной "l" в начале присвоено 2, а не ноль.
MrGluck
Ворчун
Эксперт CЭксперт С++
6409 / 3607 / 448
Регистрация: 29.11.2010
Сообщений: 9,532
25.01.2014, 11:22     не правильно заполняется массив #7
ну так надо было ж подобрать максимально схожие буквы и использовать их для индексов в одном цикле - i и l
virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
25.01.2014, 11:23  [ТС]     не правильно заполняется массив #8
подскажи как сначала считать эти m и n не считывая элементы, создать динамический массив, а уже потом в него считать элементы из файла, я только умею считывать до конца файла, а построчно нет(
MrGluck
Ворчун
Эксперт CЭксперт С++
6409 / 3607 / 448
Регистрация: 29.11.2010
Сообщений: 9,532
25.01.2014, 11:27     не правильно заполняется массив #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int m, n;
f >> m >> n;
int **arr = new int*[m]; // выделяем память под m строк
for (int i=0; i < m; i++)
{
    arr[i] = new int[n]; // для каждой строки выделяем память под n элементов
    for (int j=0; j < n && !f.eof(); j++)
    {
        f >> arr[i][j]; // считываем очередной элемент
        std::cout << arr[i][j] << " "; // выводим его на экран
    }
    std::cout << std::endl; // перевод строки
}
 
// ...
 
// освобождаем память
for (int i=0; i < m; i++)
    delete[] arr[i];
delete[] arr;
код писал сразу в редакторе, могут быть синтаксические ошибки
virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
25.01.2014, 11:40  [ТС]     не правильно заполняется массив #10
Теперь жить станет проще, единственное что не понятно, это вот эта строчка

C++
1
j < n && !f.eof()
MrGluck
Ворчун
Эксперт CЭксперт С++
6409 / 3607 / 448
Регистрация: 29.11.2010
Сообщений: 9,532
25.01.2014, 11:41     не правильно заполняется массив #11
пока не заполнили всю строку и не достигли конца файла
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2014, 11:48     не правильно заполняется массив
Еще ссылки по теме:

Не заполняется динамический массив, кроме нулевого элемента C++
C++ Почему не заполняется массив vector?
C++ Не заполняется массив
Не заполняется массив C++
Не заполняется двумерный массив char C++

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

Или воспользуйтесь поиском по форуму:
virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
25.01.2014, 11:48  [ТС]     не правильно заполняется массив #12
аааа это по-видимому до j<n и не достигнут конец файла

Добавлено через 34 секунды
спасибо, как раз сам уже понял)
Yandex
Объявления
25.01.2014, 11:48     не правильно заполняется массив
Ответ Создать тему
Опции темы

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