strain2011   2년 전

소스코드와는 살짝 다르게 해서 결국 풀긴 풀었지/만 너무 뒷맛이 안좋아서 질문올립니다

캡처.JPG

소스코드의 출력 결과입니다 의도와 다르게 굉장히 엉뚱한 답을 내놔서 이유가 뭘까 생각해봤는데 이전에 입력한 값이 남아서 그런게 아닐까 싶은데요

fflush를 사용해봤지만 엉뚱한 답을 출력합니다

이전에 입력된 문자열을 어떻게 해야 지우고 정상적인 답을 출력하게 할 수 있을까요?

pjk8926   2년 전

제가 말을 잘 논리적으로 잘 못해도 이해해주시길바랍니다(꾸벅)

일단 코드에 보시면 문제점이 보입니다.

첫번째 문제점은 입력한 문자열에 상관없이 초기화할 때 주어진 최대문자열의 크기만큼 도는 것을 볼 수 있습니다.

그것보다는 입력한 문자열의 크기만큼 도는 것이 맞기 때문에

ex) for (j=0;j<81;j++)   =>   for (int j=0;j<strlen(str);j++)    이런식으로 고쳐주시면 됩니다.


두번째 문제점은 조건문에서 O을 넣었을 때 cnt는 1이되긴 하지만

다음 줄로 넘어가기 전에 sum은 그대로 0이고 cnt가 초기화되지도 않기 때문에 문제가 발생합니다.

ex) O => 0, OO=>0, X=>6      이런식으로 문제가 발생을 합니다. (,는 다음줄로 넘어감을 의미합니다.)

전체코드를 볼때 굳이 fflush안써도 문제가 발생하진 않을겁니다. 왜냐면 버퍼에 숫자가 남아있지만 O이냐 아니냐만을 판단하기 때문이죠.

하지만 숫자다음에 문자열을 입력하려면 숫자입력후 fflush로 버퍼에서 지워주셔야 합니다.

ps. 혹여나 제가 잘못 고치거나 말한 점이 있으면 지적해주셨으면 감사하겠습니다.(꾸벅꾸벅)

strain2011   2년 전

@pjk8926

코드 자체가 잘못된 점이 있었군요

잘못된 부분을 바로 잡아주셔서 감사드리고 친절한 설명에 또 한번 감사드립니다

이해가 아주 잘되네요!


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