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

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

Восстановить пароль Регистрация
 
Noobass
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 100
07.11.2012, 20:42     Ввод чисел и создание динамического массива #1
Ребят, у меня здесь задание: "Создайте фрагмент кода, который будет просить пользователя вводить только положительные числа, а затем создает динамический массив типа 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;
}
Есть какие-либо рекомендации?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2012, 20:42     Ввод чисел и создание динамического массива
Посмотрите здесь:

C++ ввод динамического символьного массива
C++ Создание динамического массива
Создание динамического массива C++
C++ Создание динамического массива
C++ Создание динамического массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 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
Noobass
0 / 0 / 0
Регистрация: 15.10.2012
Сообщений: 100
08.11.2012, 18:04  [ТС]     Ввод чисел и создание динамического массива #4
Если честно, я слегка запутался Но все равно огромное спасибо.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 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 в прежнее состояние, не наделав ошибок?
Yandex
Объявления
08.11.2012, 18:28     Ввод чисел и создание динамического массива
Ответ Создать тему
Опции темы

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