어렵지 않은 문제를 풀고있었는데
1시간동안 자꾸 이유모를 틀렸습니다가 나와서 계속 코드 오류를 찾고있었습니다.
그런데 문제는 '후위연산' 에 있었습니다. ( a++, a--)
아래는 문제의 코드입니다.
데이터를 입력받아 정렬하는 과정에서 입력받는 데이터가 3개 이하라 삽입정렬을 간단히 구현하여 저장하였습니다.
그런데 저 주석처리한 부분에
num[j + 1] = num[j--];
부분이 문제가 있었네요. 제가 보기엔 문제가 없어보입니다..
저부분에서 후위연산을 지우고, 그 다음줄에 j--; 를 하니 정상적으로 통과되네요.
전위연산, 후위연산시
a = --a + ++a + a--;
이런식의 연산은 컴파일러에 따라 작동방식이 다르지만, 제가 주석으로 표시한부분은 연산 후 j 를 마이너스하게 되므로 문제가없어보입니다 ㅠ
어디에서 오류가 생겼을까요?
문제 번호를 적어주세요.
별로 그렇게 간단하지가 않습니다. 정확한 규칙은 아래 링크에 있습니다. 저도 내용은 잘 모릅니다. 어렵습니다.
https://en.cppreference.com/w/cpp/language/eval_order
가장 좋은 방법은 저 규칙을 따질 일이 안 생기게 ++이나 --가 들어가서 헷갈리는 코드를 안 짜는 것 같습니다.
@malratz
님 18511번입니다.
@sait2000
님 감사합니다.
즐겨서 사용하던 문법이였는데 자제해야겠습니다...
댓글을 작성하려면 로그인해야 합니다.
qktlf789456 3년 전
어렵지 않은 문제를 풀고있었는데
1시간동안 자꾸 이유모를 틀렸습니다가 나와서 계속 코드 오류를 찾고있었습니다.
그런데 문제는 '후위연산' 에 있었습니다. ( a++, a--)
아래는 문제의 코드입니다.
데이터를 입력받아 정렬하는 과정에서 입력받는 데이터가 3개 이하라 삽입정렬을 간단히 구현하여 저장하였습니다.
그런데 저 주석처리한 부분에
num[j + 1] = num[j--];
부분이 문제가 있었네요. 제가 보기엔 문제가 없어보입니다..
저부분에서 후위연산을 지우고, 그 다음줄에 j--; 를 하니 정상적으로 통과되네요.
전위연산, 후위연산시
a = --a + ++a + a--;
이런식의 연산은 컴파일러에 따라 작동방식이 다르지만, 제가 주석으로 표시한부분은 연산 후 j 를 마이너스하게 되므로 문제가없어보입니다 ㅠ
어디에서 오류가 생겼을까요?