C/C++

Написал функцию, которая добавляет элемент в конец массива, как можно улучшить? Нули не учитываются.

#include <stdio.h>
#include <windows.h>
main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);


int mass[10] = {77,5,8,33,9,1,6};

int pushDigitInt(int *arr, int size, int val){

char countElements; //считает количество элементов в массиве, а 0 не учитывает.

for(int i = 0; i < 10; i++){
if(arr[i] != 0) {
countElements++;
}
}
arr[countElements] = val; //добавляет элемент
}


pushDigitInt(mass, sizeof(mass)/sizeof(int), 44); //добавляю элемент в конец массива

for(int i = 0; i < 10; i++){
printf("%d, ", mass[i]);
}



}
Омар _Кудзиев
Омар _Кудзиев
12 925
вместо 10 написать size, зря аргумент что ли передавал

И countElemets не инициилизирован нулем. Откуда отсчет начинаешь? И тип данных наверное лучше int использовать.

И еще, МОЖЕТ БЫТЬ, у тебя хоть и массив из 10 элементов, а заполнено 7, другие три могут быть не нулями, а мусором - надо проверить.

Да и проверки нет - а вдруг массив будет заполнен?
Владислав :)
Владислав :)
73 465
Лучший ответ
#include <iostream>
using namespace std;
int push(const int value, int* box, int length, const int buffer) {
if (length < buffer) {
box[length] = value;
++length;
}
return length;
}
int input(const char* msg = ">>> ") {
cout << msg;
int value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
void show(int* box, const int length) {
cout << "<<<";
for (auto i = 0; i < length; ++i) cout << ' ' << box[i];
puts("");
}
int fill(int quantity, int* box, int length, const int buffer) {
int value = input();
length = push(value, box, length, buffer);
if (length < quantity && length < buffer) {
length = fill(quantity, box, length, buffer);
}
return length;
}
int main() {
const int buffer = 10;
int box[buffer];
int length = 0;
int quantity = 3;
length = fill(quantity, box, length, buffer);
show(box, length);
length = push(28, box, length, buffer);
show(box, length);
system("pause > nul");
}
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

//функция изменения размера
//динамического массива:
int newsize(int *mass, int mustsize)
{
int nsize=mustsize*sizeof(int);
mass=realloc(mass, nsize);
if(mass)
return nsize;
else return 0;
}

int main()
{

int *mass, count=0;
//в начале создан динамический массив
//для 1-го элемента:
mass=(int*)malloc(sizeof(int));

//увеличиваем массив до 2-х элементов:
count=newsize(mass,2);
printf("\n size of array = %d element(s)",count/sizeof(int));

//увеличиваем массив до 5-ти элементов:
count=newsize(mass,5);
printf("\n size of array = %d element(s)",count/sizeof(int));

//заполняем массив значениями:
for(int i = 0; i <= count/sizeof(int)-1; i++)
{
mass[i] = i*5;
printf("\n mass[%d] = %d",i,mass[i]);
}

//освобождаем память от массива:
free(mass);
fflush(stdout);//сброс буфера для паузы
sleep(5);//пауза
return 0;
}

Похожие вопросы