fgets () 는.. 마지막 엔터입력을 문자열에 포함합니다.
scanf() 는 마지막 엔터입력을 문자열에 포함하지 않지요..
그리고.. fgets() 는 공백 입력을 허가합니다만..
scanf() 는 특정 마스크를 주지 않으면.. 입력은 공백에 의해 분리됩니다.
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 는 엔터문자가 있으므로 당연히 비교에서 같지 않게 나옵니다.