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

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

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

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

27.09.2012, 12:19. Просмотров 3169. Ответов 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++
Здравствуйте. Скажите где я допустил ошибку в создании динамического массива? #include<stdio.h> #include<conio.h> #include<stdlib.h> ...

Создание динамического массива в отдельной функции - C++
Здравствуйте. Объясните пожалуйста, почему для создания динамического массива в функции мы должны передавать адресс массива, а при очистке...

Создание двумерного динамического массива через функции - C++
Помогите разобраться с программой. После вхождения в функцию Fill_mas, я выхожу из программы и вводить элементы отказывается. Даже если...

Создание динамического массива, передача аргументов функции по ссылке. Программа обрабатывает результаты матча - C++
Разработать программу, предназначенную для обработки информации о матчах, сыгранных футбольной командой. Количество сыгранных матчей и...

Создание динамического массива - C++
Как объявить вот так вот : int blocks = { {0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}}; Мне пишет ошибку : массив не может...

Создание динамического массива - C++
Ребята подскажите пожалуйста не давно начал изучать С++ ,решил добавить еще один язык для себя помимо Delphi, и вот вопрос как объявить...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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"...........ну что-то такое)
Поэтому я и писал что воид нужно заменить на тип массива.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2012, 16:39
Привет! Вот еще темы с ответами:

Создание динамического массива - C++
Добрый вечер! Подскажите пожалуйста, что необходимо сделать, чтобы заменить статический массив float array; на динамический, длинна...

Создание динамического массива - C++
Добрый день! Хочу выделить память под массив, только после того как буду знать его длину. Длину вычисляю в функции. Память под массив...

Создание динамического массива - C++
Объявите указатель на массив типа double и предложите пользователю выбрать его размер. Далее напишите четыре функции: первая должна...

Создание динамического массива - C++
объясните пожалуйста вот эту часть // sozdanie dinamicheskogo massiva m*n a=(int**)malloc(m*sizeof(int *)); for(i=0;i&lt;m;i++) { ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.09.2012, 16:39
Ответ Создать тему
Опции темы

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