jm7490   1년 전

아래 이 코드로 실행 시에는 실패가 뜨지만 fgets를 scanf("%[^\n]", letter) 로 바꿔주면 성공이 뜹니다. fgets와 scanf 서로 같은걸로 알고 있는데 왜 그런건가요?

wowns456971   1년 전

질문과 관계 없는? 답변이지만 팁 하나 드려요

c언어에서 문자열을 다룰 때는 c++의 string헤더와

iostream헤더에 있는 cin, cout을 쓰는 것이 100배 더 편합니다..

akdlzhf2008   1년 전

둘의 차이는 개행문자(\n)가 문자열 입력에 함께 들어오는지 그렇지 않은지의 차이입니다.

scanf()는 \n가 없이 입력되고, fgets()는 \n까지 입력을 받습니다.

fgets()를 했을때 틀린이유는 아래의 반례('asd asd ')를 입력해보시면 됩니다. 

scanf()를 하게 되면 아래의 입력을 "asd asd " 까지만 인식하고 letter에 저장합니다.

그러나, fgets()를 하게 되면 아래의 입력을 "asd asd \n"와 같이 저장합니다.그리고 질문자님의 코드대로 처리를 하면 맨 마지막의 공백을 만나게되어 count++; 를 1번 더 해주게 됩니다.

그래서 결과로 보면 scanf()는 아래의 입력을 2로 출력하게 되고, fgets()는 3으로 출력하게 됩니다.

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