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

создание динамического массива внутри функции - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.71
Владимир 1
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 17
27.09.2012, 12:19     создание динамического массива внутри функции #1
Люди, помогите пожалуйста.
Нужно написать функцию, которая читает из файла числа (их количество заранее неизвестно) и записывает их в динамический массив. Массив создается там же в функции и, в конечном итоге, выдается в основную программу.
Код :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void formimp (char *impulse,double *arr, int &n)
{   FILE *fp=0;
    fp=fopen(impulse,"rt+");
    int i=0; double h1,h2;
    while (!feof(fp))
        {   
            fscanf(fp,"%lf\t%lf\n",&h1,&h2);
            i++;
        }
    n=i; //число элементов в файле
    rewind (fp);
    i=0;
    arr=new double [n];
    while (!feof(fp))
    {   
        fscanf(fp,"%lf\t%lf\n",&h1,&arr[i]); // считывание файла в созданный массив
        i++;
    }
    fclose(fp);
}
Результат.
1. Отладчик видит, что массив arr содержит только один элемент.
2. Поэлементный вывод arr показывает, что весь массив заполнен значением первого элемента.
???????
P.S. Файл impulse - таблица из 2 столбцов, нужен только 2-ой.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Elfenlide
23 / 23 / 1
Регистрация: 15.04.2012
Сообщений: 183
27.09.2012, 13:08     создание динамического массива внутри функции #2
Цитата Сообщение от Владимир 1 Посмотреть сообщение
Люди, помогите пожалуйста.
.
Код :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void formimp (char *impulse,double *arr, int &n)
{   FILE *fp=0;
    fp=fopen(impulse,"rt+");
    int i=0; double h1,h2;
    while (!feof(fp))
        {   
            fscanf(fp,"%lf\t%lf\n",&h1,&h2);
            i++;
        }
    n=i; //число элементов в файле
    rewind (fp);
    i=0;
    arr=new double [n];
    while (!feof(fp))
    {   
        fscanf(fp,"%lf\t%lf\n",&h1,&arr[i]); // считывание файла в созданный массив
        i++;
    }
    fclose(fp);
}
Результат.
1. Отладчик видит, что массив arr содержит только один элемент.
2. Поэлементный вывод arr показывает, что весь массив заполнен значением первого элемента.
???????
P.S. Файл impulse - таблица из 2 столбцов, нужен только 2-ой.
функция должна возвращатьзначение типа массива
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void* formimp (char *impulse,double *arr, int &n) //тут вместо воид указываете тип массива и будет указатель, если вы хотите вернуть динамический масив, а точнее указатель на него.
{   FILE *fp=0;
    fp=fopen(impulse,"rt+");
    int i=0; double h1,h2;
    while (!feof(fp))
        {   
            fscanf(fp,"%lf\t%lf\n",&h1,&h2);
            i++;
        }
    n=i; //число элементов в файле
    rewind (fp);
    i=0;
    arr=new double [n];
    while (!feof(fp))
    {   
        fscanf(fp,"%lf\t%lf\n",&h1,&arr[i]); // считывание файла в созданный массив
        i++;
    }
    fclose(fp);
return ar[i];   //<- так вы возвращаете указатель на первый элемент массива.
}
а в main нужно создать новый массив динамический, который примет указатель на массив из функции.
примерно char *mas = new char; //естественно указываете тип массива такой какие значения он будет хранить.
mas = formimp (char *impulse,double *arr, int &n);
затем после работы нужно будет освободить память - > delete[]mas;
skiminock
2 / 2 / 0
Регистрация: 11.06.2012
Сообщений: 18
27.09.2012, 15:13     создание динамического массива внутри функции #3
http://dumpz.org/269899/
вызывать & для создания
Владимир 1
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 17
27.09.2012, 16:20  [ТС]     создание динамического массива внутри функции #4
Цитата Сообщение от Elfenlide Посмотреть сообщение
функция должна возвращатьзначение типа массива
А разве передача по указателю не работает? Со статическими массивами все получалось.
Но все равно спасибо за ответ)))
Elfenlide
23 / 23 / 1
Регистрация: 15.04.2012
Сообщений: 183
27.09.2012, 16:39     создание динамического массива внутри функции #5
Цитата Сообщение от Владимир 1 Посмотреть сообщение
А разве передача по указателю не работает? Со статическими массивами все получалось.
Но все равно спасибо за ответ)))
работает, но если вы передаёте указатель на первый элемент массива типа int ,переменная принимающая этот указатель должна знать что ей передаётся указатель на элемент типа int, иначе было бы не понятно что за тип возвращаеться функцией и следовательно выбило бы ошибку скажем "невозможно присвоить типу int значение типа double"...........ну что-то такое)
Поэтому я и писал что воид нужно заменить на тип массива.
Yandex
Объявления
27.09.2012, 16:39     создание динамического массива внутри функции
Ответ Создать тему
Опции темы

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