c언어 관련 질문
글쓴이: linux_chobo / 작성시간: 토, 2020/10/10 - 12:18오전
원의 중심점과 원의 반지름을 입력받아서 구조체와 함수를 활용해 원의 면적과 원의 둘레를 출력하는 코드 입니다.
#include <stdio.h> struct point { int x,y; }; struct circle { struct point center; double radius; }; double area(struct circle c); double perimeter(struct circle c); int main(void) { struct point center; struct circle s; printf(" 원의 중심점: "); scanf("%d %d", ¢er.x, ¢er.y); printf("원의 반지름: "); scanf("%f", &s.radius); printf("원의 면적=%f, 원의 둘레=%f\n", area(s), perimeter(s)); return 0; } double area(struct circle c) { return 3.14 * c.radius * c.radius; } double perimeter(struct circle c) { return 6.28 * c.radius; }
이렇게 코드를 썻는데, 결과가 이상하게 나옵니다...,, 함수쪽에 뭔가 문제가 있는거 같은데 어디를 틀리게 쓴건가요?
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 3.31 KB |
Forums:
컴파일 할 때 에러 뿐 아니라 경고 메시지까지 잘
컴파일 할 때 에러 뿐 아니라 경고 메시지까지 잘 보시면 답을 찾는데 도움될 겁니다.
scanf 함수가 C언어 처음 배울 때 부터 나오는 함수이지만 의외로 어렵습니다.
세벌 https://sebuls.blogspot.kr/
debug를 해 보세요. line by line으로
debug를 해 보세요. line by line으로 실행해서 변수에 값이 적절하게 들어가는지 확인해 보세요.
radius가 제대로 받아졌는지 확인해보세요.
radius가 제대로 받아졌는지 확인해보세요.
디버깅 또는...
printf("%f\n", s.radius);
gcc 라면 -Wall
첨부하신 스샷을 보니, 어느 운영체제,Compiler로 컴파일하시는지 모르겠네요. 혹시, 리눅스와 GCC라면, 컴파일 할 때, -Wall을 추가해주세요. 왜 동작을 안하는지 나올것 입니다.
warning메세지에 뭘 어떻게 해야하는지도 나와있지만, 직접 해보시라고 정답을 생략합니다.
printf(" 원의 중심점: ");
printf(" 원의 중심점: ");
scanf("%d %d", ¢er.x, ¢er.y);
여기가 잘못된거 같네요
해결했습니다.
메인함수에서 struct point center;로 다시 정의해버려서 문제가 일어난거 같습니다.
저 부분을 지우고 scanf("%d %d", ¢er.x, ¢er.y);를 scanf("%d %d", &s.center.x, &s.center.y);로 바꿔서 해결했습니다.
해결하셨다니 제가 해결한 것도 공유합니다
struct point center 가 문제가 아니고요.
사실 원둘레와 면적 구하는데 중심은 필요 없죠. 반지름만 있으면 됩니다.
제가 이리저리 고친 소스 참고하셔요.
세벌 https://sebuls.blogspot.kr/
댓글 달기