66.5 연습문제: 자료형이 다른 가변 인자의 합 구하기
getSum 함수에는 10진수로 된 문자열과 정수가 들어갑니다. 다음 소스 코드를 완성하여 getSum함수에 지정된 값의 합이 출력되게 만드세요.
자료형 약칭
- char *: s
- int: i
practice_variable_argument_multiple_types.c
#include <stdio.h> #include <stdarg.h> #include <stdlib.h> long long getSum(char *types, ...) { va_list ap; int i = 0; long long result = 0; va_start(ap, types); while (types[i] != '\0') { ①_________________________ { case 's': ②_________________________________ break; case 'i': ③_________________________________ break; default: break; } i++; } va_end(ap); return result; } int main() { printf("%lld\n", getSum("siis", "12", 30000, 500000, "300")); printf("%lld\n", getSum("ssi", "150", "150", 100)); return 0; }
실행 결과
530312 400
정답
① switch (types[i]) ② result += atoi(va_arg(ap, char *)); ③ result += va_arg(ap, int);
해설
반복문에서 자료형 약칭 문자열 types의 문자 개수만큼 반복하고 있는데 types에 들어있는 문자를 하나하나 처리하려면 switch (types[i])와 같이 switch 분기문을 지정해주면 됩니다.
자료형이 정수일 때는 값을 result 변수에 계속 더해주면 되지만 문자열일 때는 atoi(va_arg(ap, char *));처럼 atoi 함수를 사용하여 문자열을 정수로 변환한 뒤 result 변수에 계속 더해주면 됩니다.