jng6017   1년 전

a > b ? D[i].x = a, D[i].y = b : D[i].x = b, D[i].y = a; <-------------------------(if문으로 고쳐쓰면 잘 들어가요..)

이 부분에서 예제를 넣으면 2, 1 은 잘 들어가는데 20,10을 20,20으로 들어가네요.. 왜 이런건가요?

(가끔씩 삼항연산자 쓸떄 , 로 여러개 연결 해서 넣을떄 이런 오류가 가끔씩 발생하는거 같더라구요 ㅠㅠ)


그리고 혹시 문제 풀이방법이 틀렷나요?

yukariko   1년 전

원래는 컴파일 오류가 발생할탠데 이상하군요

이유는 삼항 연산자의 끝부분이 모호하기 때문입니다.

아래 소스를 보시면 원래 의도는 1번인데 실제 컴파일러는 2번으로 인식하게 됩니다.

20 10 같은 경우

a > b 를 만족하여 x = 20, y = 10 이 들어가지만, 삼항 연산자를 벗어난 D[i].y = a 가 적용되어

x = 20, y = 20이 들어가게 됩니다.

jng6017   1년 전

, 이용을 하면 한번에 연결이 되는줄 알았는데 아닌가보네요 전 그렇게 알고 썻엇는데..

생각보다 제 코딩에 안 좋은 습관이 많은거 같네요 ㅠㅠ..

jng6017   1년 전

명령어가 끝나는 부분이 ; 아닌가요? 왜 벗어난걸로 인식 되는지 궁금합니다.

yukariko   1년 전

,로도 구분이 됩니다.

예를들면

if(1)a=b,b=c;

의 표현은 중괄호가없더라도 둘다 if문 안의것으로 인식됩니다.

하지만 continue나 return break 등은 앞에 쉼표가 나와선 안됩니다.

한마디로 약한 구분자라고 보시면 될것같습니다.

yukariko   1년 전

본문의 소스같은경우는 1번의 소스로 고치시면 정답을 받으실것 같습니다.

저 또한 쉼표를 자주 사용하는데, 삼항연산자는 괄호로 묶는 습관이 필요하더군요.

yukariko   1년 전

말씀하신 질문에 답을 해보자면

쉼표는 삼항연산자에서만 사용하는것이 아니기때문에 앞부분은 : 가 나올때까지로 구분지으면 되지만 뒷부분은 어디가 끝인지 구별할 수 없습니다.

그럴땐 괄호로 묶어주시면 됩니다.

jng6017   1년 전

감사합니다 궁금증이 해결되었습니다

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