kdg232355   3년 전

gets(str)을 사용하면 n을 입력받고 for문으로 들어가서 str을 먼저 입력받는게 아니라 for문이 한 번 실행되고 그 다음에 gets가 실행되더라구요. 

그래서 문자열 입력도 n-1번, sum도 최종 결과 +1이 되서 출력이 됩니다.

그래서 scanf로 바꿨는데 제대로 실행되고 결과도 잘 나오더라구요. 둘의 차이가 뭔가요?

bupjae   3년 전

10번째 줄에서 정수 하나를 읽은 후, 입력 스트림에 줄바꿈 문자 \n이 남습니다.

14번째 줄의 gets 는 줄바꿈 문자가 나올때 까지 읽은 뒤 줄바꿈 문자를 버리는 함수인데, 바로 줄바꿈 문자가 나오므로 그대로 종료합니다.

반면 13번째 줄의 scanf는 일단 공백 문자가 아닌 글자가 나올 때 까지 모두 읽고 버린 뒤 다음 번 공백 문자가 나올 때 까지 문자열에 저장하고 공백 문자는 입력 스트림에 남깁니다.

kdg232355   3년 전

댓글 감사합니다! 그 전에는 문자열을 먼저 받는 코드만 사용해서 gets를 잘 사용했는데 이번에는 안되서 뭐가 문제인지 계속 답답했었는데 덕분에 gets랑 scanf차이를 정확하게 알게되었네요. 감사합니다.

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