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

Вызов массива в функции - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
maximthis
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 5
17.11.2012, 01:44     Вызов массива в функции #1
помогите пожалуйста. не получается вызвать массив подсчитанный в функции god. kol считает верно, и выводит в функции main. а массив "а" выводится не полностью, если задаю a[0][1] (к примеру) то выводит реальное число заданное в файле, но если я уйду с первой строки и напишу к примеру a[1][0], то он выдаёт что то вроде 591737357.
как правильно вызвать этот массив в функции main чтоб все числа выводились корректно, а не только первая строка.
P.S. в функции god все значения из файла выводятся корректно.
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
#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;
 
const int N=30;
 
int god (int *kol, int *p)
{
char *oy=new char [1000];
ifstream f("lola.txt");
while(!f.eof())
{
f.getline(oy,1000,'\n');
*kol=*kol+1;
 
}
int h;
cout<<*kol<<endl;
delete[] oy;
f.close();
f.open("lola.txt");
    for(int i=0;i<*kol;i++)
    {
        for(int j=0;j<*kol;j++)
        {
           f>> *(p+(*kol)*i+j);
           cout<<"element f="<<*(p+(*kol)*i+j)<<endl;
        }
 
    }
    f.close();
 
 
}
 
int main()
{
    int kol=0,a[N][N];
    god(&kol,&a[1][0]);
    cout<<"kol="<<kol<<endl;
     cout<<"a="<<a[0][0]<<endl;
Добавлено через 33 минуты
я там в конце не так написал..хотя так тоже не работает(, но так хоть на правду больше похоже
C++
1
2
3
4
5
6
int main()
{
    int kol=0,a[N][N];
    god(&kol,&a[kol][kol]);
    cout<<"kol="<<kol<<endl;
     cout<<"a="<<a[1][0]<<endl;
вот
при a[0][1] (к примеру) он выводит корректно.
стоит строчку сделать не нулевой (a[1][1]) и выводит 69272908
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2012, 01:44     Вызов массива в функции
Посмотрите здесь:

Вызов функции массива указателей C++
Вызов функции в возврате значения функции C++
вызов функции C++
C++ Вызов функции
C++ 1. Вызов функции 2. Размер массива
вызов функции из массива, через указатель.) C++
C++ Вызов функции сразу для массива всего классов
Вызов функции в параметре другой функции C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.11.2012, 10:48     Вызов массива в функции #2
Эти циклы неправильно сделаны:
C++
1
2
3
4
5
6
7
for(int i = 0; i < *kol; i++)
{
   for(int j = 0; j < *kol; j++)
   {
        f >> *(p + (*kol) * i + j);
        cout << "element f = " << *(p + (*kol) * i + j) << endl;
   }
Добавлено через 6 минут
У вас количество чисел в файле равно *kol, а вы собираетесь считать количество равное *kol * *kol. И индексы, по которым помещаются числа, неверно вычисляются.

Добавлено через 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;
 
const int N = 30;
 
void god (int *kol, int *p)
{
char *oy = new char[1000];
 
ifstream f("lola.txt");
while(!f.eof())
{
    f.getline(oy, 1000,'\n');
    *kol = *kol + 1;
}
 
cout << *kol << endl;
 
delete [] oy;
f.close();
 
f.open("lola.txt");
for(int i = 0; i < *kol; i++)
{
      f >> p[i];
      cout << "element f = " << p[i] << endl;
}
 
f.close();
}
 
int main()
{
    int kol = 0;
    int a[N];
    
    god(&kol, a);
    
    cout << "kol = " << kol << endl;
 
    for(int i = 0; i < kol; i++)
        cout<<"a = " << a[i] << endl;
       
    system("pause");
    return 0;
}
Работать будет, хотя в коде много что не так сделано.

Добавлено через 1 час 53 минуты
Логика кода должна быть такой. В main() cоздали указатель на int. Передали его в функцию god(). Посчитали там количество чисел в файле. Для этого совсем не обязательно создавать динамический массив такого размера. Можно и статический на 10 символов (надеюсь хватит?). После этого, под указатель, переданный в функцию, создаётся динамический массив, размером равный количеству чисел в файле. Читаются туда числа из файла. В main(), работа с этим массивом, идёт через указатель. После работы с массивом, освобождается память под ним.
Yandex
Объявления
17.11.2012, 10:48     Вызов массива в функции
Ответ Создать тему
Опции темы

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