После появления запроса на ввод чисел программа вылет с такой ошибкой:
Segmentation fault (core dumped)
#include "iostream"
using namespace std;
long double raf(int a , ...)
{
int *p = &a;
int b = 0;
for(; a != 0; a++)
{
b+= *(++p);
}
int c = b/a;
return c;
}
int main()
{
cout << "Midle count of numbers 5,3,9,1,7: " << endl;
raf(5,5,3,9,1,7);
return 0;
}
Если уж хочется использовать нестандартный метод, то все равно делать это нужно правильно:
#include <iostream>
using namespace std;
long double raf(int a , ...)
{
int *p = &a;
int cnt = a;
int b = 0;
for(; cnt != 0; --cnt)
{
b+= *(++p);
}
return ((long double)b)/a;
}
int main()
{
cout << "Midle count of numbers 5,3,9,1,7: " << endl;
cout << raf(5,5,3,9,1,7) << endl;
return 0;
}
Посмотрите у себя - цикл ставите бесконечный (пока растущее a не станет нулем, потом делите на него - нулевое... Делите целочисленно, а надеетесь получить long double... Наконец, просто не выводите полученный результат. Об английском языке промолчу :)
Стандартное же решение такое:
#include <iostream>
#include <cstdarg>
using namespace std;
long double raf(int a , ...)
{
va_list p;
va_start(p,a);
int cnt = a;
int b = 0;
for(; cnt != 0; --cnt)
{
b+= va_arg(p,int);
}
va_end(p);
return ((long double)b)/a;
}
int main()
{
cout << "Midle count of numbers 5,3,9,1,7: " << endl;
cout << raf(5,5,3,9,1,7) << endl;
return 0;
}
Доступ к variadic аргументам функций (параметры ...) в С и С++ делается только через va_list и макросы va_start/va_arg/va_end. Других способов не существует.
Поэтому ни о каком int *p = &a; и прочей вашей "адресной арифметике" не может быть и речи. Это какая-то белиберда, непонятно откуда вами выкопанная. Неудивительно, что дело заканчивается Segmentation fault.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости