fscanf, scanf 사용하기

Posted 2012. 10. 27. 12:01

scanf 계열의 함수를 사용하다 보면 특정 문자열을 받고 싶은데 scanf 는 띄어쓰기나 탭, 엔터 모두를 분할해서 받기 때문에 이용하기가 힘든 경우가 있고 이 부분을 처리하다 보면 코드가 쓸데없이 길어지거나 하드코딩으로 가는 경우가 많다.

 

예를들어 fscanf 를 사용할때 아래와 같은 문자열을 받는다고 할때

 

김 원영(탭)남자(탭)010 1111 2222(엔터)

 

scanf("%[^\t]\t%s\t%[^\n]\n", name, sex, phone); 

이렇게 받아주면 된다.

%[^\t] 는 탭 문자가 나오기 전까지 문자열로 받는다는 뜻이고 즉 띄어쓰기든 상관없이 탭까지 끊어 받는다는 뜻이다

 

만약 fscanf 의 경우 아래와 같은 데이터 파일에서 받는다고 가정했을 시

 

김 원영(탭)남자(탭)010 1111 2222(엔터)

김 김기(탭)여자(탭)010 1111 3333(엔터)

김 뭐시기(탭)남자(탭)010 1111 4444(엔터)

 

while( EOF != fscanf("%[^\t]\t%s\t%[^\n]\n", name, sex, phone) )

{

  ~~~~~~~~~~~~~~~~~~
}

이렇게 받아주면 된다.

 

EOF != ~~~~

는 fscanf가 파일의 끝을 만나면 EOF라는 상수값을 리턴해 주는데 EOF 라는게 나올 때 까지 while 문을 돌리게 된다.

 

그리고 마지막에 \n 이 들어가는 이유는 꽤 중요한데 만약 \n을 안써주게 되면 버퍼에 계속 \n이 남아있게 되어서 다음 받을때 영향을 주기 때문이다.

물론 \t 도 마찬가지

« PREV : 1 : ··· : 23 : 24 : 25 : 26 : 27 : 28 : 29 : ··· : 43 : NEXT »