amj0215   7달 전

혼자하다가 계속 런타임 오류, 컴파일 에러, 메모리 초과 뜨다가 드디어 틀렸습니다로 나왔는데

계속 고쳐도 어디서부터 문제인지 모르겠어요..

애초에 접근 방법부터가 틀린것 같기도 하고..

pill27211   7달 전

먼저 float bi[seq] = { 0, };과 같은 코드는 Undefined behavior입니다. C++ 표준에서는 배열의 크기를 컴파일 타임에 결정합니다. 즉, 배열 크기에 변수가 들어갈 수 없습니다. 하지만 C++이 아닌 C언어는 C99부터 float bi[seq]; 과 같은 "선언"은 허용하도록 했는데요(그럼에도 지원하지 않는 IDE도 있음), 이에 따라 C++의 몇몇 컴파일러에서도 옵션을 통해 부분적으로 허용하고 있습니다. 이처럼 C++에서는 배열 크기에 변수가 들어가는 것조차 제한적인데 동시에 초기화까지는 이어질 수 없습니다. 따라서 애초에 넉넉한 크기 만큼의 배열을 선언 or 동적할당을 해주시거나, 이럴 때 유용한 STL 컨테이너(vector같은)를 이용하는 것이 바람직합니다. 그리고 26줄의 코드와 같이 배열 전체를 초기화 하는 것은 최초 선언할 때만 가능합니다.

amj0215   7달 전

그러면 애초에 score[] 크기를 크게 잡고 첫번째 돌 때 5번까지 쓰고 다음에 돌 때 5번에다가 다른 수를 덧씌우는 식으로 해도 되나요?

pill27211   7달 전

배열을 사용하시는 방식은 자유입니다. 단지 말씀하신데로 한다면 이전 사이클에서의 퍼포먼스가 이번 사이클에 영향을 주지 않도록 잘 컨트롤 해야 괜찮겠지요! 또한 float는 double보다 연산시 오차가 커 정밀도에서 떨어집니다. 따라서 double형 사용을 추천 드립니다.

amj0215   7달 전

이렇게 바꿨음에도 자꾸 틀리는건 어디가 문제일까요..?ㅠ 더블로 바꾸고 배열 크기도 바꿨는데..

pill27211   7달 전

score배열이 정수형이므로 16번줄의 %f를 %d로 바꿔주시면 될 것 같습니다.

댓글을 작성하려면 로그인해야 합니다.