c언어
정보 올림피아드 - 129
명용
2016. 7. 28. 19:16
삼각형의 밑변의 길이와 높이를 입력받아 넓이를 출력하고, “계속하시겠습니까?”에서
하나의 문자를 입력받아 그 문자가 'Y'나'y'이면 작업을 반복하고 다른 문자이면
종료하는 프로그램을 작성하시오.
(넓이는 반올림하여 소수 첫째자리까지 출력한다.)
![]() 밑변의 길이 = 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; } |
비쥬얼로 풀었던 소스 ↓
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를 두 번 써줌으로써 문제를 해결함