2015-05-20 2 views
0

Здесь у меня есть программа, которая предлагает пользователю ввести размер массива, затем спросить пользователя о целых числах и рассчитать среднее значение. Я что-то упускаю, цифры не хранятся в массиве.необходимо сохранить n чисел в динамическом массиве

int n; 
int *sizeOfArr; 
double total = 0; 
double avg; 

cout << "Please enter n, for size of array: "; 
cin >> n; 

sizeOfArr = new int[n]; //dynamically allocates n amount of memory 

for (int i = 1; n >= i; i++){ 

    cout << "Enter number " << i << ": "; 
    cin >> sizeOfArr[n]; 

    if (sizeOfArr[n] < 0){ 
     do{ 
      cout << "Please enter postive number for number " << i << ": "; 
      cin >> sizeOfArr[n]; 
     } while (sizeOfArr[n] <= 0); 
    } 

    total += sizeOfArr[n];  
} 

avg = total/n; //average formula 

cout << "\nAverage of the numbers stored in dynamic array = " << avg << endl; //output 

return 0; 
system("pause"); 

ответ

0

Вы используете неправильные переменное для индекса sizeOfArr[] - вы должны использовать переменный цикл i в качестве индекса. Кроме того, поскольку вы выполняете итерацию от 1 до n, а не более обычное от 0 до n - 1, вам нужно настроить индекс, чтобы компенсировать это. Таким образом, либо изменить все вхождения:

sizeOfArr[n] 

к:

sizeOfArr[i - 1] 

или изменить цикл для более канонической форме:

for (int i = 0; i < n; ++i) 

, а затем просто использовать:

sizeOfArr[i] 
+0

'sizeOfArr [я-1]' – Algo

+0

@Algo: хороший улов - будет обновить ответ. –

+0

Спасибо за ответ, похоже, что он работает. Следует также изменить основную часть. Как размерOfArr = новый int [n - 1]? – user3658656

-1

Использование sizeOfArr[i] вместо sizeOfArr[n]

+0

Mind Объясните свой код? –

+0

Ну, спасибо Sulthan Allaudeen за исправление моего сообщения – Abbas

+0

Итерация начинается с 1 не 0 – Algo

2

Используйте std :: vector вместо динамического массива int *. Вам не нужно запрашивать у пользователя размер(), вы можете просто динамически добавлять переменную через std :: vector.push_back(). Размер можно получить, вызвав std :: vector.size().

Некоторые ошибки в вашем коде: Ваша петля начинается int i = 1; Это неверно. Первый индекс массива равен 0. То же самое при ссылках на векторные элементы: вы должны установить sizeOfArr [i] not sizeOfArr [n].

Теперь точка для вычисления среднего значения: Ваши расчеты выполняются с int. Если вы вычислите, что ваш результат будет неправильным. Вы должны использовать double to to so.

0

На самом деле это должно быть sizeOfArr[i-1] вместо sizeOfArr[n]

Ваш индекс итерации i начинается с 1, но вместо того, чтобы индекс массива должна начинаться с 0

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