문제 정의
선거에 참여하는 각 후보에게 투표를 행사하고, 후보별 득표 수를 집계한 뒤 그 결과를 화면에 출력하는 프로그램을 C 언어로 어떻게 작성할 수 있을까요?
해결 방법
이번 예제에서는 세 명의 후보가 선거에 출마했다고 가정합니다. 프로그램이 제공해야 할 핵심 기능은 다음 두 가지입니다.
투표하기(Cast Vote) — 메뉴에서 번호를 선택해 원하는 후보에게 투표합니다.
득표 수 확인(Find Vote Count) — 각 후보가 획득한 총 득표 수를 집계하여 최다 득표자(당선자)를 출력합니다.
모든 동작은 main() 함수의 switch문에서 기능에 맞는 함수를 호출하는 방식으로 처리됩니다. 후보 이름은 #define 매크로로 정의하고, 득표 수는 전역 변수로 관리하면 어느 함수에서든 손쉽게 접근할 수 있습니다.
예제 코드
#include <stdio.h>
#define CANDIDATE1 "ABC"
#define CANDIDATE2 "XYZ"
#define CANDIDATE3 "PQR"
int votescount1 = 0, votescount2 = 0, votescount3 = 0;
void castvote() {
int choice;
printf("\n\n ### Please choose your Candidate ####\n\n");
printf("\n 1. %s", CANDIDATE1);
printf("\n 2. %s", CANDIDATE2);
printf("\n 3. %s", CANDIDATE3);
printf("\n 4. None of These");
printf("\n Input your choice (1 - 4) : ");
scanf("%d", &choice);
switch(choice){
case 1: votescount1++; break;
case 2: votescount2++; break;
case 3: votescount3++; break;
default: printf("\n Error: Wrong Choice !! Please retry");
getchar();
}
printf("\n thanks for vote !!");
}
void votesCount() {
printf("\n\n ##### Voting Statistics ####");
printf("\n %s - %d", CANDIDATE1, votescount1);
printf("\n %s - %d", CANDIDATE2, votescount2);
printf("\n %s - %d", CANDIDATE3, votescount3);
if(votescount1 > votescount2 && votescount1 > votescount3)
printf("\n\n Winner : %s", CANDIDATE1);
else if(votescount2 > votescount1 && votescount2 > votescount3)
printf("\n\n Winner : %s", CANDIDATE2);
else if(votescount3 > votescount1 && votescount3 > votescount2)
printf("\n\n Winner : %s", CANDIDATE3);
else
printf("\n\n No leading candidate yet.");
}
int main(){
int choice;
do{
printf("\n\n ###### Welcome to Election/Voting 2019 #####");
printf("\n\n 1. Cast the Vote");
printf("\n 2. Find Vote Count");
printf("\n 0. Exit");
printf("\n Please enter your choice : ");
scanf("%d", &choice);
switch(choice){
case 1: castvote(); break;
case 2: votesCount(); break;
case 0: break;
default: printf("\n Error: Invalid Choice");
}
}while(choice != 0);
getchar();
return 0;
}코드 설명
castvote() 함수
후보자 목록을 화면에 출력한 뒤 사용자로부터 번호를 입력받습니다. switch문이 입력값을 판별하여 해당 후보의 전역 득표 변수를 1 증가시키며, 1~4 범위를 벗어난 값이 들어오면 오류 메시지를 출력합니다.
votesCount() 함수
세 후보의 현재 득표 수를 출력하고, 비교 연산을 통해 최다 득표자를 찾아 당선자로 안내합니다. 득표 수가 같아 우세한 후보가 없으면 그 사실을 알려줍니다.
main() 함수
do-while 반복문을 이용해 사용자가 0(종료)을 입력할 때까지 메뉴를 계속 보여 줍니다. 메뉴 선택 값에 따라 switch문이 castvote() 또는 votesCount() 함수를 호출하는 구조입니다.
실행 결과
###### Welcome to Election/Voting 2019 #####
1. Cast the Vote
2. Find Vote Count
0. Exit
Please enter your choice : 1
### Please choose your Candidate ####
1. ABC
2. XYZ
3. PQR
4. None of These
Input your choice (1 - 4) : 1
thanks for vote !!
###### Welcome to Election/Voting 2019 #####
1. Cast the Vote
2. Find Vote Count
0. Exit
Please enter your choice : 1
### Please choose your Candidate ####
1. ABC
2. XYZ
3. PQR
4. None of These
Input your choice (1 - 4) : 1
thanks for vote !!
###### Welcome to Election/Voting 2019 #####
1. Cast the Vote
2. Find Vote Count
0. Exit
Please enter your choice : 2
##### Voting Statistics ####
ABC - 2
XYZ - 0
PQR - 0
Winner : ABC
###### Welcome to Election/Voting 2019 #####
1. Cast the Vote
2. Find Vote Count
0. Exit
Please enter your choice : 0