일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- PHP #핵심정리
- C++ 언어 # 핵심정리
- C언어 #부록
- C언어 # 핵심 정리
- shell_script
- MySQL #핵심정리
- C언어 # 부록
- C언어 #핵심정리
- Bandit
- C++ 언어 # 핵심 정리
- Hacking #Baic
- C++ 언어 #핵심정리
- HTML #핵심정리
- Today
- Total
cCcode
[부록] 산술 연산 계산기 (완성본) 본문
#include <stdio.h>
#include <Windows.h>
int log_i_one_1 = 0;
char log_c_one = '?';
int log_i_one_2 = 0;
int log_i_two_1 = 0;
char log_c_two = '?';
int log_i_two_2 = 0;
int log_i_three_1 = 0;
char log_c_three = '?';
int log_i_three_2 = 0;
int log_i_four_1 = 0;
char log_c_four = '?';
int log_i_four_2 = 0;
int record_count = 0;
char circle_one = 127;
char circle_two = 6;
char* blank_one = " ";
char* blank_two = " ";
char* blank_three = " ";
char* blank_four = " ";
char* blank_five = " ";
int One_digit = 0;
int Two_digit = 0;
void PRINT_CALCULATION(int one, char operand, int two);
void PRINT_CALCULATION_transfer_log(int one, char operand, int two, int sum);
void PRINT_TITLE(void);
void PRINT_CIRCLE(void);
void CIRCULATING_CIRCLE(void);
void CHANGE_TEXT_COLOR(int color_number);
void JUDGE_DIGIT(int one, int two);
int main()
{
int One, Two;
char Operand;
int sum;
char decide[30] = { 0, };
system("mode con cols=70 lines=25");
while (1)
{
exception:
CHANGE_TEXT_COLOR(15);
PRINT_TITLE();
printf("Helper : Hello, i will help you,\n"
"Please follow my direction.\n\n");
printf("Helper : Please Enter the Number and Operand.\n\n");
printf("%c ", 26);
scanf_s("%d %c %d", &One, &Operand, (unsigned char)sizeof(Operand), &Two);
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6);
if (One / 1 >= 10000 || Two / 1 >= 10000)
{
CHANGE_TEXT_COLOR(4);
printf("\nHelper : Too many inputs!\n");
printf("\nHelper : Prevent from calculator made of letters moving\n");
printf("Helper : Please enter the under 10000 number\n");
Sleep(3000);
system("cls");
goto exception;
}
switch (Operand)
{
case '+': sum = One + Two; break;
case '-': sum = One - Two; break;
case '*': sum = One * Two; break;
case '/': sum = One / Two; break;
default: CHANGE_TEXT_COLOR(4); printf("\nHelper : Wrong input! Try again!"); Sleep(1500); system("cls"); goto exception;
}
JUDGE_DIGIT(One, Two);
PRINT_CALCULATION(One, Operand, Two);
Sleep(1500);
system("cls");
PRINT_TITLE();
PRINT_CALCULATION_transfer_log(One, Operand, Two, sum);
printf("\nHelper : Do you want to continue? (yes / no)\n");
printf("%c ", 26);
scanf_s("%s", decide, (unsigned char)sizeof(decide));
printf("\nHelper : Okay.");
Sleep(1500);
system("cls");
if (decide[0] == 'N' || decide[0] == 'n' && decide[1] == 'O' || decide[1] == 'o') break;
}
CHANGE_TEXT_COLOR(9);
CIRCULATING_CIRCLE();
CHANGE_TEXT_COLOR(15);
return 0;
}
void JUDGE_DIGIT(int one, int two)
{
int count = 0;
while (one != 0)
{
one = one / 10;
count += 1;
}
One_digit = count;
count = 0;
while (two != 0)
{
two = two / 10;
count += 1;
}
Two_digit = count;
}
void CIRCULATING_CIRCLE(void)
{
int i;
for (i = 0; i < 10; i++)
{
int temple;
temple = circle_one;
circle_one = circle_two;
circle_two = temple;
PRINT_CIRCLE();
Sleep(500);
system("cls");
}
}
void CHANGE_TEXT_COLOR(int color_number)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color_number);
}
void PRINT_CIRCLE(void)
{
printf(" %c %c %c %c %c %c %c %c %c\n", circle_one, circle_two, circle_one, circle_two, circle_one, circle_two, circle_one, circle_two, circle_one);
printf(" %c %c\n", circle_two, circle_two);
printf(" %c %c\n", circle_one, circle_one);
printf(" %c %c\n", circle_two, circle_two);
printf(" %c B Y E %c\n", circle_one, circle_one);
printf(" %c %c\n", circle_two, circle_two);
printf(" %c %c\n", circle_one, circle_one);
printf(" %c M A D E %c\n", circle_two, circle_two);
printf(" %c %c\n", circle_one, circle_one);
printf(" %c in %c\n", circle_two, circle_two);
printf(" %c %c\n", circle_one, circle_one);
printf(" %c bo - il %c\n", circle_two, circle_two);
printf(" %c %c\n", circle_one, circle_one);
printf(" %c %c %c %c %c %c %c %c %c\n", circle_two, circle_one, circle_two, circle_one, circle_two, circle_one, circle_two, circle_one, circle_two);
}
void PRINT_CALCULATION(int one, char operand, int two)
{
CHANGE_TEXT_COLOR(14);
if (One_digit == 4 && Two_digit == 2 || One_digit == 2 && Two_digit == 4)
blank_one = " ";
else if (One_digit <= 3 && Two_digit < 3 || One_digit < 3 && Two_digit <= 3 || One_digit == 1 && Two_digit == 4 || One_digit == 4 && Two_digit == 1)
blank_one = " ";
else
blank_one = " ";
JUDGE_DIGIT(log_i_one_1, log_i_one_2);
if (One_digit == 4 && Two_digit == 2 || One_digit == 2 && Two_digit == 4)
blank_two = " ";
else if (One_digit <= 3 && Two_digit < 3 || One_digit < 3 && Two_digit <= 3 || One_digit == 1 && Two_digit == 4 || One_digit == 4 && Two_digit == 1)
blank_two = " ";
else
blank_two = " ";
JUDGE_DIGIT(log_i_two_1, log_i_two_2);
if (One_digit == 4 && Two_digit == 2 || One_digit == 2 && Two_digit == 4)
blank_three = " ";
else if (One_digit <= 3 && Two_digit < 3 || One_digit < 3 && Two_digit <= 3 || One_digit == 1 && Two_digit == 4 || One_digit == 4 && Two_digit == 1)
blank_three = " ";
else
blank_three = " ";
JUDGE_DIGIT(log_i_three_1, log_i_three_2);
if (One_digit == 4 && Two_digit == 2 || One_digit == 2 && Two_digit == 4)
blank_four = " ";
else if (One_digit <= 3 && Two_digit < 3 || One_digit < 3 && Two_digit <= 3 || One_digit == 1 && Two_digit == 4 || One_digit == 4 && Two_digit == 1)
blank_four = " ";
else
blank_four = " ";
JUDGE_DIGIT(log_i_four_1, log_i_four_2);
if (One_digit == 4 && Two_digit == 2 || One_digit == 2 && Two_digit == 4)
blank_five = " ";
else if (One_digit <= 3 && Two_digit < 3 || One_digit < 3 && Two_digit <= 3 || One_digit == 1 && Two_digit == 4 || One_digit == 4 && Two_digit == 1)
blank_five = " ";
else
blank_five = " ";
printf("%c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c\n", 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127);
printf("%c %c\n", 127, 127);
printf("%c %c\n", 127, 127);
printf("%c %c %d %c %d %s%c\n", 127, 26, one, operand, two, blank_one, 127);
printf("%c %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c %c\n", 127, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 127);
printf("%c %c\n", 127, 127);
printf("%c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c\n", 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127);
printf("%c %c\n", 127, 127);
printf("%c %c\n", 127, 127);
printf("%c %c %d %c %d %s%c\n", 127, 26, log_i_one_1, log_c_one, log_i_one_2, blank_two, 127);
printf("%c %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c %c\n", 127, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 127);
printf("%c %c %d %c %d %s%c\n", 127, 26, log_i_two_1, log_c_two, log_i_two_2, blank_three, 127);
printf("%c %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c %c\n", 127, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 127);
printf("%c %c %d %c %d %s%c\n", 127, 26, log_i_three_1, log_c_three, log_i_three_2, blank_four, 127);
printf("%c %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c %c\n", 127, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 127);
printf("%c %c %d %c %d %s%c\n", 127, 26, log_i_four_1, log_c_four, log_i_four_2, blank_five, 127);
printf("%c %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c %c\n", 127, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 127);
printf("%c %c\n", 127, 127);
printf("%c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c\n", 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127);
CHANGE_TEXT_COLOR(15);
}
void PRINT_CALCULATION_transfer_log(int one, char operand, int two, int sum)
{
CHANGE_TEXT_COLOR(14);
if (record_count == 0)
{
log_i_one_1 = one;
log_c_one = operand;
log_i_one_2 = two;
}
else if (record_count == 1)
{
log_i_two_1 = log_i_one_1;
log_c_two = log_c_one;
log_i_two_2 = log_i_one_2;
log_i_one_1 = one;
log_c_one = operand;
log_i_one_2 = two;
}
else if (record_count == 2)
{
log_i_three_1 = log_i_two_1;
log_c_three = log_c_two;
log_i_three_2 = log_i_two_2;
log_i_two_1 = log_i_one_1;
log_c_two = log_c_one;
log_i_two_2 = log_i_one_2;
log_i_one_1 = one;
log_c_one = operand;
log_i_one_2 = two;
}
else
{
log_i_four_1 = log_i_three_1;
log_c_four = log_c_three;
log_i_four_2 = log_i_three_2;
log_i_three_1 = log_i_two_1;
log_c_three = log_c_two;
log_i_three_2 = log_i_two_2;
log_i_two_1 = log_i_one_1;
log_c_two = log_c_one;
log_i_two_2 = log_i_one_2;
log_i_one_1 = one;
log_c_one = operand;
log_i_one_2 = two;
}
if (sum >= 1000000)
blank_one = " ";
else
blank_one = " ";
JUDGE_DIGIT(log_i_one_1, log_i_one_2);
if (One_digit == 4 && Two_digit == 2 || One_digit == 2 && Two_digit == 4)
blank_two = " ";
else if (One_digit <= 3 && Two_digit < 3 || One_digit < 3 && Two_digit <= 3 || One_digit == 1 && Two_digit == 4 || One_digit == 4 && Two_digit == 1)
blank_two = " ";
else
blank_two = " ";
JUDGE_DIGIT(log_i_two_1, log_i_two_2);
if (One_digit == 4 && Two_digit == 2 || One_digit == 2 && Two_digit == 4)
blank_three = " ";
else if (One_digit <= 3 && Two_digit < 3 || One_digit < 3 && Two_digit <= 3 || One_digit == 1 && Two_digit == 4 || One_digit == 4 && Two_digit == 1)
blank_three = " ";
else
blank_three = " ";
JUDGE_DIGIT(log_i_three_1, log_i_three_2);
if (One_digit == 4 && Two_digit == 2 || One_digit == 2 && Two_digit == 4)
blank_four = " ";
else if (One_digit <= 3 && Two_digit < 3 || One_digit < 3 && Two_digit <= 3 || One_digit == 1 && Two_digit == 4 || One_digit == 4 && Two_digit == 1)
blank_four = " ";
else
blank_four = " ";
JUDGE_DIGIT(log_i_four_1, log_i_four_2);
if (One_digit == 4 && Two_digit == 2 || One_digit == 2 && Two_digit == 4)
blank_five = " ";
else if (One_digit <= 3 && Two_digit < 3 || One_digit < 3 && Two_digit <= 3 || One_digit == 1 && Two_digit == 4 || One_digit == 4 && Two_digit == 1)
blank_five = " ";
else
blank_five = " ";
printf("%c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c\n", 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127);
printf("%c %c\n", 127, 127);
printf("%c %c\n", 127, 127);
printf("%c %c %d %s%c\n", 127, 26, sum, blank_one, 127);
printf("%c %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c %c\n", 127, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 127);
printf("%c %c\n", 127, 127);
printf("%c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c\n", 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127);
printf("%c %c\n", 127, 127);
printf("%c %c\n", 127, 127);
printf("%c %c %d %c %d %s%c\n", 127, 26, log_i_one_1, log_c_one, log_i_one_2, blank_two, 127);
printf("%c %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c %c\n", 127, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 127);
printf("%c %c %d %c %d %s%c\n", 127, 26, log_i_two_1, log_c_two, log_i_two_2, blank_three, 127);
printf("%c %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c %c\n", 127, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 127);
printf("%c %c %d %c %d %s%c\n", 127, 26, log_i_three_1, log_c_three, log_i_three_2, blank_four, 127);
printf("%c %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c %c\n", 127, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 127);
printf("%c %c %d %c %d %s%c\n", 127, 26, log_i_four_1, log_c_four, log_i_four_2, blank_five, 127);
printf("%c %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c %c\n", 127, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 127);
printf("%c %c\n", 127, 127);
printf("%c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c\n", 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127);
record_count += 1;
CHANGE_TEXT_COLOR(15);
}
void PRINT_TITLE(void)
{
printf("+---- Calculation Program 2 ----+\n\n");
}
// made in jeong boil(cCcode)
산술 연산을 하는 계산기입니다.
생기부 첨부 목적으로 작성된 코드이며, 따라서
코드를 사용하실 경우 자료의 출처를 명시해주시기 바랍니다.
우선 프로그램을 실행시키면
연산자와 숫자들을 입력해주라는 문구가 출력됩니다. 이 때, 10000 이상의 숫자나 % 연산자를 사용할 경우 다시 입력하라는 메세지와 함께 입력 화면으로 돌아오게 됩니다.
제가 mod 연산자등을 막은 이유는 첫 째 산술 연산(+, -, *, /)에 충실한 계산기를 만들기 위함도 있지만 솔직히 귀찮았습니다. 그리고 10000 이상의 숫자를 막은 이유는 프로그램을 진행 하시다보면 계산기 그림을 보실 수 있을텐데 그게 아스키코드로 그린것으로 입력되는 값에 따라 위치가 달라집니다. 제가 1000 자릿수까지는 어떻게 하든 공백 문자열로 맞출 수 있겠는데 그 이상은 ..
값을 제대로 입력하실 경우 계산기 그림에 가장 상단부에 그 값이 그려집니다.
보시면 아시다시피 본식이 적혀있던 위치에는 산술연산의 결과가 그리고 그 아래 0 ? 0 으로 적혀있던 위치에는 산술 연산 본식이 위치하게 됩니다. 저 부분은 일종의 로그처럼 어떤 산술 연산을 수행했는지 기록하는 역할을 하기 위해 만들었습니다.
음수끼리의 연산 또한 가능합니다.
이대로 끝내면 아쉬워서 "Do you want to continue?" 라는 질문에 "no"라고 입력하여 종료될 때 OS가 종료할 때 나타나는 로딩 바 같은 그림을 구현했습니다. 움직임까지는 구현했으나, 그림이 좀 어수룩해 아쉽네요.
이처럼 간단한 계산기를 만드는 데도 많은 양의 코드가 필요하다는 걸 보고 현직 개발자분들이 존경스럽다 느꼈습니다.
'C Language Basic' 카테고리의 다른 글
C Language [핵심정리] - 32 (0) | 2021.06.27 |
---|---|
C Language [핵심정리] - 31 (1) | 2021.06.21 |
C Language [핵심정리] - 29 (0) | 2021.06.15 |
C Language [핵심정리] - 28 (0) | 2021.06.15 |
C Language [핵심정리] - 27(수정) (0) | 2021.06.11 |