xorms86   3년 전

아직 입출력에대해 미숙한 초보입니다.

제가 getchar()에 대해 알고있는 점은 엔터가 입력될때까지 문자입력을 받는다 정도만 알고있습니다.

제 코드에서 입력으로

3 3

WBW  //엔터

BWB  //엔터

까지 치니 아직 입력 한줄이 더 남았는데

WBW

BWB 를 바로 출력하더라고요.. 

근데 이상한게 만약에 '\n' 를 포함해서 배열에 할당이 된다하면(제가 위에서 알고있던 개념이랑 달라서 가정한것)

 배열의 공간이 총 9개인데 

위에서는 8번째 입력을 하자마자 바로 종료가 되버립니다.

for문의 3*3번 반복해라 라는 조건에 관계없이 입력을 종료한거 같은데 이해가 안되네요..

아직 뭣도 모르는 버퍼랑 관련이있는거 같아서

cin.ignore()까지 써봤는데 

3 3

WBW

BWB

WBW //엔터

를 치니

WB

BW

WB

이번엔 출력으로 이렇게 나와버립니다...

이도 저도 못하는 상황이라 

제 수준을 좀 이해해주시고 쉬운 설명 부탁드립니다...

dldyddlwl   3년 전

거의 다 하셨는데, 한 가지 놓치신게 있습니다.

애초에 위에서 r 과 c를 입력받았죠? 이 때, 엔터를 치게되니(\n), 이것이 남은 채로 다음으로 넘어가, char[i][j]로 입력되어버립니다. (의도치 않은 상황)

의도하신 대로 입력을 받기 위해선, 정수 입력을 받은 후에도 cin.ignore()를 해주셔서, 버퍼에 들어있는 \n  이 녀석을 없애주셔야 합니다.

따라서, 꼭 이 문제 말고도, 정수형(또는 실수형)과 문자형을 입력받는 경우에는 항상 이 점을 유의해주세요! ( \n이 문자로 들어가버리는 실수 )

( 그럼, 문자열 이후에 정수형은 괜찮은가? => 문자열 입력 이후에도 \n이 버퍼에 남아있지만, 정수형은 숫자가 나올때까지 \n을 받지 않으므로 괜찮습니다. )

그럼 이제 입출력 이해를 돕기위해 위의 예시를 이용해보겠습니다. 자, 일단 정수형 이후, 따로 버퍼를 건드리지 않으셨기에, \n이 그대로 버퍼에 남아있습니다.

따라서,  ('\n' 'W' 'B' )  ('W' '\n' 'B' )  ('W' 'B' '\n' ), 이렇게 9개가 입력되면서, 원했던 입력을 끝내기도 전에, for loop가 끝나게 됩니다.

출력) 

WBW

BWB

그리고 두 번째 경우, ( \n W B  ) W    (\n B W ) B  (\n W B),   ( cin.ignore가 원치 않은 곳에서 실행되었습니다. )  


1. '\n' 'W' 'B' 가 첫 행에 모두 입력된 후, cin.ignore()로 인해, 그 다음의 W가 들어오지 못하고(무시되어) 넘어갑니다.

2. \n B W 를 읽어오게 되고, 그 다음의 B를 무시하게 됩니다. 

3. 그리고 \n W B를 입력받아서,

최종 출력이 말씀하신 것처럼 

출력)

WB

BW

WB 

처럼 나오게 됩니다. 

입출력은 중요합니다! 단계별로 풀어보기에 입출력 파트가 있습니다. 이 부분을 공부하시다보면 자연스럽게 많이 배우실 수 있을 것이라고 생각합니다. 파이팅!

xorms86   3년 전

진짜 정말 감사드려요.. 너무 제 레벨과 맞게 설명을 해주시고 어디서 헷갈렸을지를 잘 파악해주시고 그 부분에 대해 설명해 주셔서 앞으로 몇번은 두고두고 보고싶은 설명인거 같아요..

덕분에 입출력에대해 한걸음 다가간 기분이네요 정말 감사합니다!

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