//알파벳 개수를 입력 받아
//임의 대문자알파벳들을 저장
//한줄에 5개씩 출력
//A : 00개 B: 00개 C: 00개 G:00개 H: 00개
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int input_a();
void make_random(int su,char *pt);
int input_c();
void print_a(int su, int su1, char *pt);
void print_c(int su, char * pt);
int menu();
int main(void) {
int quit = 0;
while(!quit){
int number = menu();
switch(number){
case 1 :
printf("알파벳 개수를 입력 받습니다.\n");
//총 알파벳 개수 입력
int su = input_a();
char * pt = (char *)malloc(su);
srand((unsigned)time(NULL));
// 난수 생성
make_random(su, pt);
break;
case 2 :
printf("한 줄에 출력될 개수를 입력 받습니다.\n");
// 한 줄에 출력될 개수 입력
int su1 = input_c();
break;
case 3 :
printf("생성된 알파벳을 출력합니다.\n");
//대문자 출력
print_a(su, su1, pt);
break;
case 4 :
printf("알파벳을 개수별로 출력합니다. \n");
//총 개수 출력
print_c(su, pt);
break;
case 5 :
printf("프로그램을 종료합니다.\n");
free(pt);
quit = 1;
// exit(1); // 뭐가 더 좋은지 질문하기
break;
default :
printf("1~5에 해당하는 값을 눌러주세요.\n");
}
}
//어떤 메뉴에서 동적할당을 해줘야하나. 관건.
//메뉴는 다 등가적인 관계아닌가 ? 그런데 이 코드는 swtich에 순서가 정해져 있지 않나 ? 그럼 안되는 것 아닌가 ?
// //총 알파벳 개수 입력
// int su = input_a();
// char * pt = (char *)malloc(su);
// srand((unsigned)time(NULL));
// // 난수 생성
// make_random(su, pt);
return 0;
}
int menu(){
printf("번호를 입력하세요.\n");
printf("1. 알파벳 개수 입력\n");
printf("2. 한 줄에 출력될 개수 입력\n");
printf("3. 알파벳 출력\n");
printf("4. 알파벳 개수별 출력\n");
printf("5. 종료\n");
int i;
scanf("%d",&i);
return i;
}
int input_a(){
int su;
printf("개수 입력 : ");
scanf("%d", &su);
return su;
}
void make_random(int su,char *pt){
for (int i = 0; i < su; i++) {
pt[i] = rand() % 26 + 65;
}
}
int input_c(){
int su1;
printf("한 줄에 출력될 개수 입력 :");
scanf("%d", &su1);
return su1;
}
void print_a(int su, int su1, char *pt){
printf("\\\\ 대문자 출력 \\\\\\ \n");
for (int i = 0; i < su; i++) {
printf("%-3c", pt[i]);
if (i % su1 == su1 - 1 || su - 1 == i) {
printf("\n");
}
}
}
void print_c(int su, char * pt){
printf("\n각 대문자 개수 출력 \n");
int tfk = 0;
for (char ch = 'A'; ch <= 'Z'; ch++) {
int cnt = 0;
for(int i = 0; i <su; i++){
if (pt[i] == ch) {
cnt++;
}
}
if (cnt != 0) {
printf("%3c : %d개 " , ch, cnt);
tfk++;
if (tfk % 5 == 0 || ch == 'Z') {
printf("\n");
}
}
else if (ch == 'Z' && tfk % 5 != 0 ) {
printf("\n");
}
}
}
참고자료
kg아이티뱅크학원 (자료구조 수업)