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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.71
Владимир 1
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 17
#1

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

27.09.2012, 12:19. Просмотров 3076. Ответов 4
Метки нет (Все метки)

Люди, помогите пожалуйста.
Нужно написать функцию, которая читает из файла числа (их количество заранее неизвестно) и записывает их в динамический массив. Массив создается там же в функции и, в конечном итоге, выдается в основную программу.
Код :
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-ой.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2012, 12:19     создание динамического массива внутри функции
Посмотрите здесь:
Создание двумерного динамического массива в функции C++
C++ Создание динамического массива в отдельной функции
Создание двумерного динамического массива через функции C++
Создание динамического массива, передача аргументов функции по ссылке. Программа обрабатывает результаты матча C++
C++ Создание динамического массива
Создание динамического массива C++
C++ Создание динамического массива
C++ Создание динамического массива
C++ Создание динамического массива
Создание динамического массива C++
Создание динамического массива C++
C++ Создание динамического массива

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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     создание динамического массива внутри функции
Ответ Создать тему
Опции темы

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