2016년 6월 9일 목요일

이것이 c언어다. 16장 기부금관리

이름과 기부금을 입력받고, 목록과 평균값 출력. 기부받는 사람수는 제한없음.

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

void print_str(char **pName, int *pDonation, int nCount);
int setAverage(int *pDonation, int nCount);
void free_(char (*pName)[], int *pDonation, int cnt);

int main(void)
{
    int nSize = 5;
    int nCount = 0;
    char (*pName)[10];
    int *pDonation;
    int i;
    int nAverage = 0;
    char szName[10];
    int donation;

    pName = (char (*)[10])malloc(sizeof(szName)*nSize);
    pDonation = (int *)malloc(sizeof(donation)*nSize);

    while(1)
    {
        if(nCount >= nSize )
        {
            nSize += 5;
            pName = (char (*)[10])realloc(pName,sizeof(szName)*nSize);
            pDonation = (int *)realloc(pDonation,sizeof(donation)*nSize);
        }
        else
        {
            printf("Name (EXIT : end) : ");
            gets(szName);
            if(strcmp(szName,"end") == 0)break;

            printf("Donation : ");
            scanf("%d",&donation);
            getchar();

            strcpy(pName[nCount],szName);
            pDonation[nCount] = donation;
            nCount++;
        }

    }
    //nCount  배열의 마지막인수보다 1 크다.
    nAverage = setAverage(pDonation, nCount);
    for(i=0;i<nCount;i++)
    {
        printf("%d. %s : %d\n",i,pName[i],pDonation[i]);
    }
    printf("Average : %d\n",nAverage);
    free_(pName,pDonation,nCount);
    return 0;
}


void free_(char (*pName)[10], int *pDonation, int cnt)
{
    int i;
    for(i=0;i<cnt;i++)
    {
        free(pName);
        free(pDonation);
    }
}
int setAverage(int *pDonation, int nCount)
{
    int nTotal = 0;
    int i;
    for(i=0;i<nCount;i++)
    {
        nTotal = nTotal + pDonation[i];
    }
    return (int)(nTotal/nCount);
}


댓글 없음:

댓글 쓰기