Programming/C

C언어) 환율 계산기 프로그램(달러, 원)

쫑드기 2020. 5. 2. 22:31

<프로그램 개요>

환율을 입력해 달러를 원으로, 원을 달러로 계산해 출력해주는 프로그램이다.

 

<추가해본 기능>

3번째 자리마다 ','를 넣어서 결과 값을 보기 쉽게 출력해주는 기능을 넣었다.

 

<문제 해결에 어려웠던 점>

1. 정수형 숫자를 문자열로 바꿀 때  

2. 정수형 숫자를 거꾸로 출력할 때

3. ','를 출력해야 했을 때

 

<문제 해결 방법>

구글링을 통해 다른 사람의 코드를 분석하며 공부해봤다.

 

<느낀 점>

스스로 창의적인 코드를 만들어 프로그램을 짜는 것은 쉬운 일이 아닌 것 같다..

창의성은 여러 가지 지식이 뭉쳐서 시너지를 내는 것이기 때문에 나보다 실력이 좋은 분들의 코드를 분석하는 것도 좋은 방법이라고 생각했다. 그렇게 내 것이 쌓인다면 나도 언젠간 창의적인 코드를 짜서 효율적인 프로그램을 만들 수 있을 거라 믿는다.

하루하루 꾸준히 도전한다면 어느샌가 실력이 늘어있을 거다!!

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <stdio.h>
 
void MakeStringComa(int result_value,char *result_str); // 결과 값을 문자열로 바꿔 ','를 출력가능하게 해주는 함수
 
int main(void)
{
    int exchange_rate,dollar,won,way;  //환율, 달러, 원, 서비스 방법 변수 선언
    int result_value; // 결과 값을 담을 변수 선언
    char result_str[20]; // 결과 값을 문자열로 바꿔서 담을 변수
    
 
    do
    {
        printf("========================================================================\n");
        printf("현재 달러에 대한 원화 환율을 입력해주세요(소수점 불가능) >> ");
        scanf("%d",&exchange_rate);
 
        while (1)
        {
            printf("========================================================================\n");
            printf("원하시는 서비스를 선택해주세요\n");
            printf("1. 달러 => 원\n");
            printf("2. 원 => 달러\n");
            printf("========================================================================\n");
            scanf("%d",&way);
 
            printf("%d번 서비스를 선택하셨습니다.\n",way);
 
            if (way == 1//way가 1일 때 달러를 원으로 바꾸는 기능
            {
                printf("========================================================================\n");
                printf("바꿀 달러를 입력해주세요 >> ");
                scanf("%d",&dollar);
                
                result_value = dollar * exchange_rate;  //달러와 환율을 곱해 원을 구하는 코드
                MakeStringComa(result_value,result_str); //결과 값에 콤마를 넣어주는 함수 ex) 1,000,000
 
                printf("결과값 : %s원 입니다.\n",result_str); //결과 값(문자열) 출력 후 탈출
                break;
            }
            else if (way == 2//way가 2일 때 원을 달러로 바꾸는 기능
            {
                printf("========================================================================\n");
                printf("바꿀 원화를 입력해주세요 >> ");
                scanf("%d",&won);
        
                result_value = won / exchange_rate; //환율로 원을 나누어 달러를 구하는 문장
                MakeStringComa(result_value,result_str); //결과 값에 콤마를 넣어주는 함수 ex) 1,000,000
                
                printf("결과값 : %s$ 입니다.\n",result_str); //결과 값(문자열) 출력 후 탈출
                break;
            }
            else //1,2 외에 다른 숫자를 입력했을 경우 
            {
                printf("<Error!!>> 다시 입력해주세요.\n");
                continue;
            }
        }
        printf("========================================================================\n");
        printf("프로그램을 다시 사용하고 싶으시다면 아무 숫자나 눌러주세요.(Enter an integer)\n");
        printf("프로그램을 종료하고 싶으시다면 아무 문자나 눌러주세요.(q to quit)\n");
        printf("========================================================================\n");
    } while (scanf("%d",&way)==1); // 문자를 입력한다면 %d이기 때문에 scanf가 입력받을 값이 아님. 그래서 0반환 후 종료
                                   // 숫자를 입력한다면 1반환 후 계속 실행
    
    return 0;
}
 
void MakeStringComa(int result_value,char *result_str)
{
    char str[20],*p; // 결과 값을 담기위해 포인터와 배열 선언
 
    if (result_value < 0//결과 값이 음수일 경우 
    {
        result_value *= -1;
        *result_str++ = '-';
    }
 
    if (result_value == 0//결과 값이 0일 경우
    {
        *result_str++ = '0';
        *result_str++ = '\0';
    }
 
    p = str;
    for (int i = 0; result_value > 0; i++//결과 값을 거꾸로 str을 가리키는 *p에 대입해주면서 ',' 까지 대입
    {
        if (i && (i % 3== 0//3번째 자리마다 ',' 를 넣어줌
            *p++ = ',';
 
        *p++ = (result_value % 10+ '0'//결과 값을 거꾸로 만들어주는 코드
        result_value /= 10;               // ""
    }
    p--//for구문을 탈출할 때 p주소값이 증가했으므로 다시 감소시켜줌
 
    while (p >= str) 
    {
        *result_str++ = *p--;
    }
    *result_str = '\0'//마지막에 null character 대입
}
 
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs
 

결과

 

틀린 부분이 있다면 피드백 주시면 감사하겠습니다.

좋은 하루 보내세요~!