코드 설명
<main함수>
- 입력받을 정수의 개수 정하기(입력받기) (scanf_s)
- 개수만큼 정수 입력하기 (scanf_s)
- 문자 배열을 선언하여 정렬 중 로딩 화면 출력하기 (char* dot [], char* loading [])
- 사용자가 종료할 때까지 반복하기 위해 while문 사용
- goto문을 사용하여 선택지에 없는 번호를 입력했을 경우 다시 정렬 선택 코드로 올라가기
- Windows 헤더 파일을 include 하여 "system(cls);"를 사용 -> 화면 클리어
- 마지막으로 free함수로 메모리 해제
<sortAsc(오름차순), sortDsc(내림차순)>
- 정렬 방법 선택하기(오름차순, 내림차순 -> 따로 void함수 만들기)
- 이중 for문 사용
- 값을 임시 저장할 변수 temp를 선언하여 값 비교 후 저장
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
void sortAsc(int* arrNum, int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = i+1; j < size; j++) {
if (*(arrNum + i) > *(arrNum + j)) {
int temp = *(arrNum + i);
*(arrNum + i) = *(arrNum + j);
*(arrNum + j) = temp;
}
}
}
}
void sortDsc(int* arrNum, int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = i + 1; j < size; j++) {
if (*(arrNum + i) < *(arrNum + j)) {
int temp = *(arrNum + i);
*(arrNum + i) = *(arrNum + j);
*(arrNum + j) = temp;
}
}
}
}
void main() {
int* arrNum = 0;
int size = 0;
int choice = 0;
const char* dot[] = { ".", "..", "...", "...."};
const char* loading[] = {"□□□□□□□□□", "■■■□□□□□□", "■■■■■■□□□", "■■■■■■■■■"};
while (1) {
printf("입력하실 정수의 개수를 입력하세요(나가기 : -99)\n");
scanf_s("%d", &size);
if (size == -99) break;
arrNum = (int*)calloc(size, sizeof(int)); //동적할당 초기화
printf("입력하신 개수만큼 정수를 입력하세요\n");
for (int i = 0; i < size; i++) {
scanf_s("%d", arrNum + i); //주소를 알려줘야해서 *() 사용하지 않음
}
system("cls"); //화면 클리어
for (int i = 0; i < size; i++) {
printf("%d ", *(arrNum + i)); //값을 읽어와야 하기에 *를 사용하여 배열에 접근
}
printf("\n");
again:;
printf("정렬 방법 선택하기(종료 : -99)\n");
printf("1. 오름차순\n2. 내림차순\n3. 종료\n=>");
scanf_s("%d", &choice);
if (choice == 3)
break;
else if (choice == 1) {
sortAsc(arrNum, size);
}
else if (choice == 2) {
sortDsc(arrNum, size);
}
else {
printf("잘못 입력하셨습니다.\n");
goto again; //선택지를 잘못 입력한 경우 again으로 돌아가 다시 선택
}
system("cls"); //화면 클리어
//정렬중 로딩 화면 출력
for (int i = 0; i < 4; i++) {
printf("%s\n", loading[i]);
//%s : 직접 한 번 참조해서 배열에 들어있는 값을 뽑아냄
printf(" 정렬중%s", dot[i]);
Sleep(1000); //1초 간격으로 출력
system("cls"); //화면 클리어
}
for (int i = 0; i < size; i++) {
printf("%d ", *(arrNum + i));
Sleep(500); //0.5초 간격으로 출력
}
printf("\n");
}
free(arrNum); //메모리 날리기(중요!)
}
만약 입력한 정수의 개수가 4개라면 가장 밖의 반복문이 돌아가는 범위(i의 범위)는 인데스 0, 1, 2까지로 정합니다.
그러고 안에 있는 반복문이 돌아가는 범위(j의 범위)는 인덱스 i 보다 한 칸 뒤에 있는 인덱스(i + 1)부터 시작해서 인덱스 4까지로 정합니다.

<콘솔창>
감사합니다!
2021.09.07
'C언어' 카테고리의 다른 글
[C언어] 막대그래프 출력하기 (0) | 2021.09.13 |
---|---|
[C언어] 동적할당 (dynamic allocation) (0) | 2021.09.06 |
[자료구조 - C언어] 정렬(Sort) - Bubble, Insertion, Selection (0) | 2021.08.30 |
[C언어] 로또 번호 뽑기 (0) | 2021.08.17 |
[C언어] 구조체(2) - 예제 (0) | 2021.08.08 |