c언어

정보 올림피아드 - 129

명용 2016. 7. 28. 19:16



삼각형의 밑변의 길이와 높이를 입력받아 넓이를 출력하고, “계속하시겠습니까?”에서 

하나의 문자를 입력받아 그 문자가 'Y'나'y'이면 작업을 반복하고 다른 문자이면 

종료하는 프로그램을 작성하시오.

(넓이는 반올림하여 소수 첫째자리까지 출력한다.)

 



 [Copy]
밑변의 길이 = 11
높이 = 5
입력한 삼각형의 넓이는 27.5입니다.
계속하시겠습니까? Y
밑변의 길이 = 10
높이 = 10
입력한 삼각형의 넓이는 50.0입니다.
계속하시겠습니까? N
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
#include <stdio.h>
int young() {
    double a = 0, b = 0;
    double d;
    scanf("%lf %lf"&a, &b);
    d = (a*b) / 2;
    printf("밑변의 길이 = ");
    printf("높이 = ");
    printf("입력한 삼각형의 넓이는 %0.1lf입니다.\n", d);
    printf("계속하시겠습니까? ");
    return 0;
}
 
int main() {
    char c = 'y';
    while (1) {
        if (c == 'y' || c == 'Y') {
            young();
            scanf("%c\n"&c);
                        scanf("%c\n"&c);
        }
        else
        {
            return 1;
        }
    }
    return 0;
}

cs



비쥬얼로 풀었던 소스 ↓


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
#include <stdio.h>
#include <stdlib.h>
int young() {
    int a = 0, b = 0;
    double d;
    scanf_s("%d %d"&a, &b);
    getchar(); // stdin buffer 
    d = (a*b) / 2;
    printf("밑변의 길이 = %d\n", a);
    printf("높이 = %d\n", b);
    printf("입력한 삼각형의 넓이는 %0.1lf입니다", d);
    printf("계속하시겠습니까? ");
    return 0;
}
 
int main() {
    char c = 'y';
    while (1) {
        if (c == 'y' || c == 'Y') {
            young();
            scanf_s("%c\n"&c);
        }
        else
        {
            return 1;
        }
    }
    system("pause");
    return 0;
}
cs

scanf에서 %d %d로 입력을 해주고 엔터를 누를때 개행문자로 한글자 더 들어가서 

프로그램이 바로 종료가 되버리는 오류가 존재했음

정올에서는 뭔가 getchar를 못받아들이는거같아서 

scanf를 두 번 써줌으로써 문제를 해결함