С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Noobass
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 100
#1

Ввод чисел и создание динамического массива - C++

07.11.2012, 20:42. Просмотров 834. Ответов 4
Метки нет (Все метки)

Ребят, у меня здесь задание: "Создайте фрагмент кода, который будет просить пользователя вводить только положительные числа, а затем создает динамический массив типа int из полученных значений".
Короче, застрял я у меня одна ошибка, по-моему о несогласованности типов, но как ее убрать, понятия не имею Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main ()
{
    unsigned int mass[5];
    cout<<"Vvedite massiv: ";
    cin>>mass[0];
    cin>>mass[1];
    cin>>mass[2];
    cin>>mass[3];
    cin>>mass[4];
    unsigned int *pn=new unsigned int[(strlen(mass))+1];
    pn=mass;
    cout<<pn<<"\n";
    system("pause");
    return 0;
}
Есть какие-либо рекомендации?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2012, 20:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ввод чисел и создание динамического массива (C++):

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

Ввод двумерного динамического массива с консоли - C++
Здравствуйте, помогите пожалуйста, мне нужно ввести с консоли двумерный массив, мне известна максимальная длинна строки, но я не знаю...

Ввод динамического массива неизвестной длины - C++
Нужно создать динамический массив целых чисел, размер которого неизвестен, а каждое введенное число должно сразу помещатьмя в массив,...

Ввод-вывод двумерного динамического массива - C++
Здраствуйте. Задана задача, в ходе которой нужно ввести динамический массив(каждый елемент с новой строчки), а затем вывести его уже как...

Ввод и вывод значения в/из динамического массива - C++
у меня возникла проблема при работе с массивами , когда я вставляю в массив переменную , и вывожу ее , то у меня вместо цифры которая была...

Создание динамического массива - C++
Хотел написать программу, чтобы пользователь мог задать количество элементов в одномерном массиве, но компилятор пишет что количество...

4
alex_289
3 / 3 / 0
Регистрация: 27.05.2012
Сообщений: 12
07.11.2012, 21:22 #2
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
#include <iostream>
 
using namespace std;
 
int main()
{
    int sz=0;
    bool correct;
    cout<<"enter size of array: ";
    cin>>sz;
    unsigned int mas[sz];
    for(int i=0;i<sz;++i)
        {
            do
            {
                cout<<"enter element number["<<i<<"]: ";
                cin>>mas[i];
                if(!(correct=cin.good()))
                    {
                        cin.clear();
                        cout<<"not reasonably input\n";
                        cin.ignore(10,'\n');
                    }
             }while(!correct);
        }
    unsigned int *pmas=new unsigned int[sz];
    for(int j=0;j<sz;++j)
        pmas[j]=mas[j];
    for(int k=0;k<sz;++k)
        cout<<"Pmas "<<pmas[k]<<"\n";
    delete []pmas;
    return 0;
}
0
Kuzia domovenok
2078 / 1907 / 176
Регистрация: 25.03.2012
Сообщений: 6,576
Записей в блоге: 1
07.11.2012, 21:39 #3
Цитата Сообщение от Noobass Посмотреть сообщение
Есть какие-либо рекомендации?
Не делать так,
Цитата Сообщение от Noobass Посмотреть сообщение
pn=mass;
пока не освободишь выделенную ранее память.

Впрочем, похоже тебе надо не указатель pn на массив mass завести, а выделить новый массив pn, содержащий копию mass.
Тогда тем более так нельзя делать.
Алекс правильно показал, как создавать копию массива.
Цитата Сообщение от alex_289 Посмотреть сообщение
unsigned int *pmas=new unsigned int[sz];
for(int j=0;j<sz;++j)
pmas[j]=mas[j];
Добавлено через 12 минут
Никогда не забывай, что указатель - это переменная, хранящая какой-то адрес памяти. (номер ячейки попросту говоря). Несколько указателей могут хранить номер одной и той же ячейки, хранящей объект, по которым можно изменять его из разных мест, где используются эти указатели.
Но если номер хранится в одном указателе, его ни за что нельзя терять.
Как присвоил указателю некий адрес ячейки
C++
1
pn=new...
Так больше старайся и не производить с pmas никаких изменений/присвоений/арифметических действий (
C++
1
pn=...; pn++; pn+=...//НЕ НАДО ТАК
) Храни его, чтобы отдать в delete тот же самый номер ячейки, что получил от =new
1
Noobass
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 100
08.11.2012, 18:04  [ТС] #4
Если честно, я слегка запутался Но все равно огромное спасибо.
0
Kuzia domovenok
2078 / 1907 / 176
Регистрация: 25.03.2012
Сообщений: 6,576
Записей в блоге: 1
08.11.2012, 18:28 #5
Цитата Сообщение от Noobass Посмотреть сообщение
Если честно, я слегка запутался Но все равно огромное спасибо.
попробую простыми словами.
то, что ты присваиваешь указателю операцией = new это адрес памяти. Его ни за что нельзя терять. Всякие сложения, умножения, приравнивания нулю переменной pmas практически навсегда уничтожат то число, что тебе выделил new. Это просто недопустимо.
Число это (pmas) нужно хранить без изменений и отдать в конце оператору delete.
Все изменения должны производится с данными, расположенными по этому адресу, а не с самим адресом.
Т.е. pmas[0]=0; - можно
pmas=0 - нет.
Конечно это относится только к указателям на динамическую память, выделенную с помощью new и вообще сильно упрощено. Но идея ясна?
new даёт адрес, который ты хранишь в pmas. И поэтому лучше его не терять.
Cделаешь pmas=0; и всё пропало! как теперь узнать, чему был равен pmas до этого?
Сделаешь несколько раз pmas++ И всё практически пропало! Как теперь вернуть pmas в прежнее состояние, не наделав ошибок?
1
08.11.2012, 18:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2012, 18:28
Привет! Вот еще темы с ответами:

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

Создание динамического массива - C++
Как создать динамически массив размера n если n вводиться с клавиатуры. А еще и двумерный cin&gt;&gt;n int a=new int; не работает

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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