fgets와 scanf의 차이

김동웅·2021년 1월 13일
0

algorithm

목록 보기
4/11

fgets () 는.. 마지막 엔터입력을 문자열에 포함합니다.

scanf() 는 마지막 엔터입력을 문자열에 포함하지 않지요..

그리고.. fgets() 는 공백 입력을 허가합니다만..

scanf() 는 특정 마스크를 주지 않으면.. 입력은 공백에 의해 분리됩니다.

scanf ( "%[^\n]s", <char *> ); 이렇게 하게되면 공백 포함 엔터이전까지를 받아들입니다.

gets ( str ); 과 똑같은 기능입니다. gets() 는 엔터를 문자열에 포함하지 않습니다.

다만.. scanf ( "%d %[^\n]s", <int >, <char > ); 이렇게

scanf() 의 활용도가 훨씬 높습니다. %[^\n]s <== 이 마스크만 알면.. scanf() 의 우수함을 알수 있지요.

( scanf() 의 한가지 단점은.. 엔터 잔상이 입력버퍼에 남게 됩니다.. fflush(stdin); 로 비워줘야하지요. )

fgets() 의 특징은 원하는 길이만큼만 받을 수 있다는 장점이 있습니다.

fgets() 로 입력받은 문자열은 보통의 경우 마지막 엔터문자를 지워줘야 원하는 처리가 가능합니다.

( 파일에서 fgets() 로 읽어올때도 마찬가지로.. 마지막에 엔터문자가 포함됩니다. )

방법은 2가지..

char str[128];

fgets ( str, 128, stdin );

str[strlen(str)-1] = 0x00; 또는.. sscanf ( str, "%s", str ); // 전자가 편합니다.

( 한 라인에 여러가지의 데이터가 포함된 경우에는.. sscanf() 로 쪼개고.. 이때는 엔터가 포함되지 않지요 )

문자열 비교가 안 되는 이유는.. scanf() 로 입력받은 pPN[i]->name 은.. 엔터문자가 없고..

fgets() 로 입력 받은.. temp 는 엔터문자가 있으므로 당연히 비교에서 같지 않게 나옵니다.

0개의 댓글

관련 채용 정보