본문 바로가기

C_study

[C] 코딩도장 66 : 함수에서 가변 인자 사용하기

66.6 심사문제: 가변 인자의 합 구하기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdarg.h>

int sum(int args, ...)
{
   int result = 0;
    va_list ap;
    va_start(ap, args);
    for (int i = 0; i < args; i++)
    {
        result += va_arg(ap, int);
    }
    va_end(ap);
    return result;
}

int main()
{
    int num1, num2;
    int num3, num4, num5;

    scanf("%d %d", &num1, &num2);
    scanf("%d %d %d", &num3, &num4, &num5);

    printf("%d\n", sum(2, num1, num2));
    printf("%d\n", sum(3, num3, num4, num5));

    return 0;
}

66.7 심사문제: 가변 인자의 정수 합 구하기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdarg.h>

int getSum(char *args, ...)
{
    int result = 0;
    int i = 0;
    va_list ap;
    va_start(ap, args);
    
    while (args[i] != '\0')
    {
        switch (args[i])
        {
            case 'i': // 정수의 합을 구하므로 'i'일 때만 결과값에 더해줍니다
                result += va_arg(ap, int);
                break;
            case 'd':
                va_arg(ap, double);
                break;
            case 's':
                va_arg(ap, char*);
                break;
            default:
                break;    
        }
        i++;
    }
    va_end(ap);
    return result;
}

int main()
{
    int num1, num2, num3;

    scanf("%d %d %d", &num1, &num2, &num3);

    printf("%d\n", getSum("isi", num1, "C", 10));
    printf("%d\n", getSum("sdsi", "Hello, world!", 5.3, "A", num2));
    printf("%d\n", getSum("iiss", 25, 38, "k", "R"));
    printf("%d\n", getSum("sidii", "Hello, C", num3, 2.234567, 878, 1291));

    return 0;
}