yg04076   1년 전

그냥 cin>>string으로 받으면 N번 돌면 마지막까지 출력이 다 되는데

이상하게 getline으로 입력을 받으면 for 1번 덜 도네요... 왜 그런가요? 

N+1돌리는 방법 말고 getline으로 더 깔끔하게 푸는 방법은 없을까요? 

pill27211   1년 전

getline()의 디폴트 구분자는 '\n'(개행문자)입니다.

아시다시피 cin 사용(15행) 후 정수는 N에 저장 되지만, 입력 버퍼에 '\n'은 그대로 남아 있죠.

따라서 첫 실행된 getline()은 입력 버퍼에 진입 했다가 저 '\n'문자를 보고 (구분자인 개행문자를 없애며)곧바로 종료 됩니다.

즉, 정작 제대로 된 문자열 입력은 두 번째 getline()부터 시작되는 것이죠.

결과적으로 작성하신 것처럼 혼용하실 경우, cin.ignore()을 사용해 '\n'을 미리 없애주어야 합니다.(16행에 추가)

yg04076   1년 전

와... 그건 처음알았네요!! 바로 이해했습니다 감사합니다^^

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