2015-09-17 3 views
0

Хорошо, так что это, наверное, очень простой вопрос, я просто совсем не знаком с C++ и изо всех сил пытаюсь понять большинство вещей. Меня попросили создать массив, в котором хранятся случайные числа, но пользователь должен определить размер массива. Затем я должен отображать все числа в массиве. То, с чем я борюсь, отображает все элементы массива. На данный момент я уверен, что у меня есть часть массива, но я могу показать только один номер. Вот мой код до сих пор:Отображение чисел из созданного пользователем массива C++

#include <iostream> 
#include <cstdlib> 
#include <stdlib.h> 
#include <ctime> 

using namespace std; 
using std::srand; 
using std::rand; 
using std::time; 

void Display(int *, int); 

int main(void) 
{ 
    int userSize; 
    cout << "Please enter the size of the array: "; 
    cin >> userSize; 

    int* randArray = new int[userSize]; 

    srand(time(NULL)); 

     for (int i = 0; i < userSize; i++) { 
     randArray[i] = rand() % 20 + 1; 
     } 

     //Disregard the next few lines, I was just testing to see if anything was actually in the array. 
     /*cout << randArray[0] << endl; 
      cout << randArray[1] << endl; 
      cout << randArray[2] << endl; 
      cout << randArray[19] << endl;*/ 

    Display(randArray, sizeof(randArray)/sizeof(int)); 
    return 0; 

    delete[] randArray; 
} 

void Display(int *arrayData, int numElements) 
{ 
    for (int counter = 0; counter < numElements; counter++) 
    { 
    std::cout << *(arrayData + counter) << std::endl; 
    } 
    return; 
} 

Я должен также упомянуть, что учитель дал нам с кодом после строки, которая удаляет массив.

Это вопрос, на который я должен ответить: Задайте пользователю количество элементов, которые будут храниться в массиве. Затем вы должны динамически распределять память для хранения этого массива, который будет использоваться так же, как предыдущая задача (заполнение массива случайными данными, отображение данных на экране ).

+1

Что вы имеете в виду? Массив имеет столько элементов, сколько пользователь выбирает. – gsamaras

+0

^Правильно, если пользователь вводит 10, тогда у вас будет 10 элементов в массиве. Что ты спрашиваешь? –

+2

'randArray' - это указатель, поэтому' sizeof (randArray) '- размер указателя ... – immibis

ответ

2

sizeof(randArray) не сообщает вам количество байт, которое вы выделили. Скорее, он сообщает вам размер указателя, который в вашей системе оказывается таким же, как размер целого числа, поэтому sizeof(randArray)/sizeof(int) возвращает 1 всегда. Вместо этого используйте userSize в качестве второго параметра в вызове функции Display.

Также, вы delete[] randArray после return 0. Это неверно; ничего после выполнения return 0. Вместо этого вы хотите его.

Далее, рассмотрим использование std::vector вместо (если не требуется использовать необработанный указатель для этого задания)

+0

Мне нужно отобразить все элементы массива. Поэтому скажите, что пользователь вводит 20, тогда массив имеет 20 «ящиков» со случайным числом в них (между 1-20). Кажется, я покажу только один номер, когда он должен отображать все 20. Видимо, это имеет какое-то отношение к тому, как я вызываю Display(). Я также буду обновлять OP с точным вопросом. Кроме того, я не думаю, что мне разрешено использовать 'std: vector'. – Garfield

+0

Как я упоминал в ответе, вы неправильно вызываете 'Display'. То, что вы хотите сделать, это 'Display (randArray, userSize);'. –

+0

Ahhhh Я вижу, что я сейчас делаю неправильно. Большое вам спасибо, вы не представляете, как облегчить это, когда я увидел все 20 номеров. – Garfield

2

Проблема sizeof. Он дает вам размер типа аргумента, а не того, что стоит. Ваш должен пройти userSize до Display().

Вы должны также delete массив перед вами return. Код за return никогда не будет выполнен.

Смежные вопросы