C: программа аварийно завершает работу до завершения цикла for

Здравствуйте, команда Stackoverflow.Я начинающий программист на C и работаю над программой, которая считывает данные о свадебных подарках, а затем выводит информацию, включающую максимальную стоимость подарка, минимальную стоимость подарка, общее среднее значение стоимости подарка и среднее значение подарков, которые были оценены при x > 0. Я закончил писать все, но программа всегда вылетает после первого цикла. Я смотрел на это в течение последних нескольких часов, поэтому у меня возникли проблемы с поиском ошибки. Вот код, который у меня есть:

#include <stdio.h>
#include <stdlib.h>


int main() {

    //Opens the file and creats a pointer for it.
    FILE *ifp;
    ifp = fopen("gifts.txt", "r");

    //Declares the variables
    int i, j, k, l, m, n, o, p, q, x, y;
    int gift_sets, num_gifts, prices, max_value, max, avg_val, no_zero;

    //Scans the file and assigns the first line to variable "gift_sets"
    fscanf(ifp, "%d", &gift_sets);

    //Begins a for loop that repeats based on the value of gift_sets
    for (i = 0; i < gift_sets; i++) {

        printf("Wedding Gifts #%d\n", i + 1);
        printf("Gift Value\t Number of Gifts\n");
        printf("----------\t ---------------\n");

        //Scans the price values into the array prices[num_gifts]
        fscanf(ifp, "%d", &num_gifts);
        int prices[num_gifts];

        //Creates a loop through the prices array
        for (j = 0; j < num_gifts; j++){
            fscanf(ifp, "%d", &prices[j]);
        }

        //Declares a frequency array
        int freq[max + 1];

        for (k = 0; k <= max; k++) {
            freq[k] = 0;
        }

        for (l = 0; l < num_gifts; l++) {
            freq[prices[l]]++;
        }
        for (m = 0; m < max + 1; m++) {
            if (freq[m] > 0){
                printf("%d\t%d",m, freq[m]);
            }
        }

        printf("\n");

        //Zeroes the variable "max_val."
        int max_val = prices[0];

        //Loops through the array to find the maximum gift value.
        for (n = 0; n < num_gifts; n++){
            if (prices[n] > max_value)
                max_value = prices[n];
        }

        // Zeroes "min_val."
        int min_val = prices[0];

        //Finds the lowest value within the array.
        for(o = 0; o < num_gifts; o++){
            if(prices[o] !=0){
                if(prices[o] < min_val){
                    min_val = prices[o];
                 }
             }
        }

        //Calculates the total number of gifts.
        double sum_gifts = 0;
        for(p = 0; p < num_gifts; p++){
            sum_gifts = sum_gifts + prices[p];
        }

        //Calculates the average value of all the gifts.
        avg_val =  (sum_gifts / num_gifts);

        //find non zero average
        double x = 0;
        int y = 0;
        for(q = 0; q < num_gifts; q++){
            if (prices[q] != 0){
                x += prices[q];
                y++;
            }
        }

        //Calculates the average value of the gifts, excluding the gifts valued zero.
        int no_zero = x / y;

        //Prints the maximum gift value.
        printf("The maximum gift value is: $%d", max_value);
        printf("\n");

        //Prints the minimum gift value.
        printf("The minimum gift value is: $%d\n", min_val);


        //Prints the average of all the gifts.
        printf("The average of all gifts was $%.2lf\n",avg_val);

        //Prints the no zero average value of the gifts.
        printf("The average of all non-zero gifts was $%.2lf",no_zero);
        printf("\n\n\n");

    }

    return 0;
}

Заранее спасибо за помощь, ребята. Как всегда, это высоко ценится.

РЕДАКТИРОВАТЬ: Чтобы уточнить, «сбой» — это ошибка Windows «gifts.exe перестала работать» при выполнении программы. В нижней части окна написано, что «Процесс вернул -1073741819 <0xC0000005>»

0
задан lnafziger 29 March 2012 в 03:09
поделиться