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

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

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

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

21.05.2014, 10:42. Просмотров 3590. Ответов 21
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
    int a, i = 0;
    int *array = new int [10];
    std::cout << "Enter numbers " << std::endl;
    while(std::cin >> a)
    { i < 10;
       array[i] = a;
    std::cout << *array << std::endl;
        }
    delete [] array;
    _getch();
        return 0;
}
Как я понял массив имеет ограниченный размер. Если это так? Если размер массива известен. А он известен:
C++
1
int *array = new int [10];
То возникает вопрос. Почему при введение строки, размер которого превышает размер массива, вся строка вводится в массив, как в вектор?
Скрин:
Инициализация динамического массива
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2014, 10:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Инициализация динамического массива (C++):

Инициализация Динамического массива - C++
Друзья просмотрите пожалуйста мой динамический массив правильно ли я его длясебястолковал #include&lt;iostream&gt; using namespace std; ...

Инициализация динамического массива - C++
Прога генерирует случайные числа(1-100) выводит их, пока не встретится 98, сохраняя все в массиве. Но мне нужно очень, чтобы программа сама...

Инициализация динамического массива - C++
Народ, подскажите как сделать так что бы, можно было задать размер массива через консоль, а не в коде через const (Если можете - объясните,...

Инициализация динамического массива - C++
Создан динамический массив (при помощи функций). Пробую инициализировать при помощи фигурных скобок.:umnik: #include &quot;stdafx.h&quot; ...

Инициализация двумерного динамического массива - C++
Как задать численные значения элементам двумерного динамического массива при его инициализации? int n=2; double **a; ...

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

21
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
21.05.2014, 10:45  [ТС] #2
Есть большая вероятность что в этой части кода ошибка. (Эта типа имправизация)
C++
1
2
3
4
5
while(std::cin >> a)
    { i < 10;
       array[i] = a;
    std::cout << *array << std::endl;
        }
Но, если это так, почему работает строка?
C++
1
std::cout << *array << std::endl;
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
21.05.2014, 10:48 #3
Цитата Сообщение от Altair42 Посмотреть сообщение
Почему при введение строки, размер которого превышает размер массива, вся строка вводится в массив, как в вектор?
вы сами то поняли что сказали? я не очень, поясните
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.05.2014, 11:16 #4
Цитата Сообщение от Altair42 Посмотреть сообщение
Есть большая вероятность что в этой части кода ошибка. (Эта типа имправизация)
и не одна
Цитата Сообщение от Altair42 Посмотреть сообщение
i < 10;
if потеряли, i не меняет своего значение
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
21.05.2014, 11:24  [ТС] #5
Цитата Сообщение от dzrkot Посмотреть сообщение
вы сами то поняли что сказали? я не очень, поясните
Вот ввожу с консоли 14 элементов в место 10. Программа записывает все 14 элементов в массив. Хоть и размер массива 10. Возникает вопрос. Почему?

Добавлено через 6 минут
Цитата Сообщение от Jupiter Посмотреть сообщение
if потеряли, i не меняет своего значение
Причем тут if ?
Я использовал цикл while. И i меняет свое значение. А то строка -
C++
1
std::cout << *array << std::endl;
Должен был выводит только первый элемент. Посмотрите на скрин.
Этот же код писал с if. Первичный код был таким
C++
1
2
3
4
.....
if(std::cin >>a)
for(int i =0; i<10; i++)
.......
Инициализировался только первый элемент 10 раз.
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
21.05.2014, 11:58 #6
не понимаю что вы пишите, у вас каша в голове похоже... или у меня...

Цитата Сообщение от Altair42 Посмотреть сообщение
Вот ввожу с консоли 14 элементов в место 10. Программа записывает все 14 элементов в массив. Хоть и размер массива 10. Возникает вопрос. Почему?
потому что у вас запись всёвремя в array[0]

Цитата Сообщение от Altair42 Посмотреть сообщение
Причем тут if ?
Я использовал цикл while. И i меняет свое значение. А то строка -
у вас в коде написано i<10; к чему это?
так и не увидел где i меняется


вы можете по-человечески вопрос сформулировать?
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
21.05.2014, 15:00  [ТС] #7
Цитата Сообщение от dzrkot Посмотреть сообщение
потому что у вас запись всё время в array[0]
И как правильно переписать мой код? Я вообще представление не имею как сохранит введенные через консоль элементы в массив. Я могу сохранит их в вектор потом скопировать в массив.

Цель программы сохранит цифры, которых я ввожу через клавиатуру, в массив.
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
21.05.2014, 15:05 #8
Цитата Сообщение от Altair42 Посмотреть сообщение
И как правильно переписать мой код? Я вообще представление не имею как сохранит введенные через консоль элементы в массив. Я могу сохранит их в вектор потом скопировать в массив.
мб прочитать любую книгу про массивы будет быстрее и полезнее чем ждать ответ на столь примитивный вопрос?
const int size=20;
for (int i=0;i<size;i++)
cin>>a[i];
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
21.05.2014, 18:24  [ТС] #9
Цитата Сообщение от dzrkot Посмотреть сообщение
мб прочитать любую книгу про массивы будет быстрее и полезнее чем ждать ответ на столь примитивный вопрос?
Это может быт для вас примитивный вопрос. А для меня примитивней инициализировать массив с консоли с помощю вектора (инициализировать вектор с консоли и скопировать элементы вектора в массив.)
Я еще раз перелистал книгу. Прочел все что было связано с массивами (исключение то что в следующих главах до которых не дошел. Не знаю что там). В книге пока не пишет как инициализировать массив с консоли.

В принципе этот код мне знаком, видел его в видео уроках в Ютуб. Забыл о нем. Спасибо что напомнили.

Добавлено через 1 минуту
dzrkot, к стати я не просто жду ответа на форуме. Я занимаюсь другими делами пока жду. Луше заниматься чем то полезным пока жду ответа чем искать какую то книгу про массивы когда у меня есть уже книга, которого посоветовали на этом форуме и там пока не написано как это делать.
0
karaulov6
-42 / 23 / 2
Регистрация: 23.03.2013
Сообщений: 242
Завершенные тесты: 2
21.05.2014, 18:36 #10
не могу понять о каком векторе идет речь, может так???

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
>
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
    cout << "Enter count:";
    int count = 0;
    cin >> count;
 
 
    //vector массив
    vector<int> vectorarray;
 
 
    for ( int i = 0; i < count; i++ )
    {
        int tmpvalue = 0;
        cout << "Enter " << i+1 << " integer: ";
        cin >> tmpvalue;
        vectorarray.push_back( tmpvalue );
    }
    //числовой массив
    int * integerarray = new int[ count ];
 
 
    //копировать vector массив в числовой
    for ( unsigned int i = 0; i < vectorarray.size( ); i++ )
    {
        integerarray[ i ] = vectorarray[ i ];
    }
 
    //очистить вектор
    vectorarray.clear( );
 
    //отобразить введенные цифры
 
    for ( int i = 0; i < count; i++ )
    {
        cout << integerarray[ i ] << endl;
    }
 
    //удалитьмассив
    delete[ ] integerarray;
 
    system( "pause" );
 
}
0
Tuma
60 / 41 / 18
Регистрация: 28.09.2013
Сообщений: 193
21.05.2014, 19:11 #11
Altair42, А вы простите чем занимаетесь?Как по-мне так вы специально ерунду пишете.
Цитата Сообщение от Altair42 Посмотреть сообщение
Вот ввожу с консоли 14 элементов в место 10. Программа записывает все 14 элементов в массив. Хоть и размер массива 10. Возникает вопрос. Почему?
Вы вообще-то вводите не 14 элементов,а 1.Или вы считаете,что компилятор должен сам заполнить массив из 10 элементов,когда на вход вы ему подаете лишь 1 строку.А программа у вас имеет бесконечный цикл,покажите,где по-вашему свое значение изменяет переменная i,кроме момента объявления переменной?
Цитата Сообщение от Altair42 Посмотреть сообщение
Цель программы сохранит цифры, которых я ввожу через клавиатуру, в массив.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
    int main()
{
    int b;
    std::cin >>b;
    int *a = new int [b];
    
        for( int i=0;i<b;i++)
            std::cin >> a[i];
        for( int i=0;i<b;i++)
            std::cout << a[i];
    delete [] a;
        return 0;
}
}
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
21.05.2014, 19:13  [ТС] #12
karaulov6, я бы использовал итераторы но да. Правда способ который показал dzrkot проще. Но я об этом не знал
0
Tuma
60 / 41 / 18
Регистрация: 28.09.2013
Сообщений: 193
21.05.2014, 19:18 #13
Хотя цикл у вас не бесконечный,но остановиться он лишь тогда,когда вы попытаетесь записать в a[0] значение равное нулю.
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
21.05.2014, 19:20  [ТС] #14
Цитата Сообщение от Tuma Посмотреть сообщение
Altair42, А вы простите чем занимаетесь?Как по-мне так вы специально ерунду пишете.
Я делаю свои первые шаги в "этом мире". Сегодня закончил изучать "Глава 4 Массивы и указатели" - Липпман.

Добавлено через 1 минуту
Цитата Сообщение от Tuma Посмотреть сообщение
Хотя цикл у вас не бесконечный,но остановиться он лишь тогда,когда вы попытаетесь записать в a[0] значение равное нулю.
Не он останавливается норм. Ввожу 5 символов ( без нуля) сохраняет их и показывает.
0
Tuma
60 / 41 / 18
Регистрация: 28.09.2013
Сообщений: 193
21.05.2014, 19:24 #15
Altair42, Как уже и писали выше,ваша программа лишь записывает в a[0] какое-либо значение.И еще раз ,эта программа остановиться лишь тогда,когда вы введете 0.То что программа выводит значение a[0] не означает,что на завершилась.
0
21.05.2014, 19:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2014, 19:24
Привет! Вот еще темы с ответами:

Инициализация двумерного Динамического массива - C++
У меня вопрос. Могу ли я создать двумерный динамический массив и инициализировать его своими значениями в коде программы. #include...

Обьявление и инициализация динамического двумерного массива в классе - C++
Пытаюсь создать в классе динамический двумерный массив, не могу понять что я делаю не так( При вызове деструктора - ошибка class...

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

Создайте класс динамического массива, в котором реализована проверка выхода за границы массива - C++
Создайте класс динамического массива, в котором реализована проверка выхода за границы массива. Перегрузите операторы: , =, +, -,++...


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

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

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