← index
cplusplus11.Examples/UNIX/memory/alloca-test.cpp
Source: cplusplus11.Examples/UNIX/memory/alloca-test.cpp
#include<iostream>
#include<alloca.h>


int averageNumbers(int *values, int s);
void printAverage(int *values, int s);
void calcAverage();

int main(void) {
    calcAverage();
    return 0;
}

int averageNumbers(int *values, int s) {
    std::cout << "Enter values: ";
    int total = 0;
    for(int i = 0; i < s; ++i) {
        std::cin >> values[i];
        total += values[i];
    }
    total /= s;
    std::cout << "Average is: " << total << "\n";
    return total;
}

void printAverage(int *values, int s) {
    int total = averageNumbers(values, s);
    std::cout << "(";
    for(int i = 0; i < s; ++i) {
        if(i == s-1) {
            std::cout << values[i];
        } else {
            std::cout << values[i]  << "+";
        }
    }
    std::cout << ")/" << s << " = " << total << "\n";
}

void calcAverage() {
    
    std::cout << "How many numbers? ";
    int num_values = 0;
    std::cin >> num_values;
    int *av = (int*)alloca(sizeof(int)*num_values); // allocate on the stack
    if(av == 0) {
        std::cerr << "Error allocating numbers..\n";
        exit(0);
    }
    printAverage(av, num_values);
}