Составить динамический список из произвольного числа элементов - C (СИ)
Формулировка задачи:
Только начали изучать Си, весь обматерился с ним ((. Ничего не получается. Вот сижу, не могу понять в чем у меня ошибка! Подскажите плиз....
Подпрограмма должна составлять динамический список из произвольного числа элементов
void INDin(int x)
{
float *mas;
mas=(float*)malloc(sizeof(float));
float input_=0;
int i=0;
while (input_!='1234')
{
scanf("%f",input_);
mas[i]=input_;
i++;
realloc(mas,sizeof(float)*(i+1));
}
Vivod(mas,i);
}Решение задачи: «Составить динамический список из произвольного числа элементов»
textual
Листинг программы
void INDin(int x/*что это за цифра?*/)
{//исходя из предпосылки о том что вы только начали, примем что это массив память под который выделяется динамически.
float *mas;//всё верно, так и надо.
mas=(float*)malloc(sizeof(float));//так не надо. Это работает, но обычно выделяют память под
//достаточно большое число элементов, или под ровно столько сколько необходимо.
float input_ = 0;//его занулять при объявлении не обязательно
int i=0;
while (input_ != 1234)/*тут явная ошибка. в одинарных кавычках записываются константные символы,
типа 'a' или 'W' или '%' или '\n', в последнем случае это символ переноса строки.*.
Если цикл исполняется до тех пор пока input_ не станет равным 1234 то нужно написать input != 1234*/
{
scanf("%f", &input_);//необкодимо высылать не input_ а его адрес, т. е. &input, именно по этому прога вылетала.
mas = (float*) realloc(mas, sizeof(float) * (i + 1));/*если память будет выделена в другом месте нужно зафиксировать это, записав в ссылку на масив. . .*/
mas[i] = input_;
i++;
}
Vivod(mas,i);
}
Объяснение кода листинга программы
- Ввод данных в программу осуществляется с помощью функции scanf.
- В данной программе создается динамический массив с помощью функций malloc и realloc.
- Размер массива определяется с помощью цикла while и увеличивается на единицу при каждом шаге.
- В качестве индекса используется переменная i, которая итерируется от 0 до n-1, где n - количество элементов в массиве.
- Функция Vivod выводит элементы массива на экран.