quaki   3년 전

0과 1의 값만 가지는 whitestart와 blackstart라는 변수가 있을 때.

if(blackstart==1) blackstart=0;
else blackstart=1;
if(whitestart==1) whitestart=0;
else whitestart=1; 로 표현해서 매번 for문이 돌때마다 0과 1을 반복하는 코드를 짰습니다.(불런 타입을 쓰지않음)


그런데 아무리 코드를 여러번 검토해봐도 for문이 돌 때마다 whitestart라는 변수가 0과 1로 번갈아가면서 바뀌어야 하는데 0과 1로 처음 한번만 바뀐 후 계속 1에서 머무는걸 봤습니다. if문에 whitestart가 1인상태에서 whitestart=0;이 안되고 그냥 else로 바져서 그렇지 않을까 생각합니다.

여러번 봐도 문제가 없어보여서 =0;와 =1;대신 --;와 ++;로 바꾸어서 나타내었구요. 그런데 갑자기 정상적으로 작동했습니다.
그리고 해당 문제의 다른 실수 부분들을 풀어서 정답을 맞추었으나. 다시 =0;와 =1;로 돌아갔는데 갑자기 문제없이 0과 1이 번갈아가면서
나오기 시작했습니다. 손댄 부분을 다 되돌려서 봤는데도 정상적으로 작동하는 것을 볼 수 있엇습니다.

제가 문제를 맞추는 과정에서 0에서 1로 바뀐 후 1만 나오는 부분을 정상적으로 수정한건 없는 것처럼 보이는데 무언가 다른이유로 이런 오류가 나올 수 있나요? 예를들어서 if와 else를 이용하는 과정에서 중괄호를 사용하는 유무라던가.. (물론 차이는 없었지만), 파일을 cpp로 저장하고 컴파일해서 그렇다든가..

질문 읽어주셔서 감사합니다!

seico75   3년 전

보통 이런 경우는 if (a==1) 를 써야 하는데 if (a=1) 과 같이 쓰는 경우에 발생을 하는데..

제출하신 이력을 보니 아래와 같이 대입문을 비교문으로 쓰신 것 같습니다.

(3번째 라인.. 8번째 라인)

이런 오류를 막을 수 있는 방법은 빌드시에 warning 을 보시거나 (백준사이트에서 워닝이 나왔고, 컴파일 시에도 나왔을 것 같습니다.)

아래와 같이 연산자 앞뒤로 띄어쓰기를 해서 눈에 잘 띄게 하는 방법이 있을 것 같네요.

  if (blackstart == 1)	  blackstart = 0;
  else if (blackstart == 0) blackstart = 1;
  if (whitestart == 1)	  whitestart == 0; 
  else if (whitestart == 0) whitestart = 1;
}
if (blackstart == 1)      blackstart = 0;
else if (blackstart == 0) blackstart = 1;
if (whitestart == 1)      whitestart == 0;
else if (whitestart == 0) whitestart = 1;

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