Jabi  
Front Page
Tag | Location | Media | Guestbook | Admin   
 
fscanf()로 파일에 쓸모없는 문자를 제외하고 문자열 받기

가끔씩 파일 입출력을 하다보면 황당한 상황에서 파일을 입출력 받으라 할때가 있다.

예) AA 10,

' ' 문자 때문에(%s를 쓰게 되면 띠어쓰기로 받아 갈 것이다.) 

게다가 마지막 ','문자는 받지 않고 문자열을 받으라면.....!!!!!

게다가 처음 "AA"문자는 받지 않고 문자열을 받으라면.....!!!!!

%[^\n]s 이 문자의 활용을 알아 봐야한다

이 문자의 뜻은 개행 문자 \n이 나올때 까지 문자열로 받으라는 말이다

파일에 AA 10,라고 입력 되어 있다면

FILE * ifs;

ifs = fopen( "파일 이름", "rt"  );

char str[20];

fscanf( ifs, "AA %[^,\n]s ", &str);

fflush(stdin);

라고 입력해주면 AA 에서부터 ,\n를 만날때 까지 문자열로 받아들이게 된다.

이렇게 받고 나서

printf("%s",str);

해주면 10 이라고 화면에 출력 될 것이다.

그리고 중요한점 저걸 쓰고 나면 반드시 버퍼를 지워 줘야된다.

이유인즉 scanf()는 개행문자까지 받아 들이는 존재이다....

자세한건 모르겠으나 fscanf()는 원래 띠워 쓰기로 받아 들이는데 stdin에 이상한 문자가 들어가 버려서

제 위치를 찾지 못하는 것 같다. 그래서 억지로 버퍼를 지워 주도록 하자.   

fflush(stdin);

이걸 뒤에 쓰면 버퍼를 지워준다.

파일 입출력 함수에 fgets()나 여러 함수가 있지만 fscanf()만큼 효율적인 함수는 보지 못했다

더군다나 %[^\n]s 표시를 이해하게 된다면 확실히 scanf()의 위대함을 알게된다.

fcanf()와 더불어 sprintf()함수도 유용하니 찾아보기 바란다.

그럼 실전에 써보자

test(10, "sdf")

이걸 받아 들여보면

10과 sdf만 받는다고 하자

int i;

char j[10];

fscanf( ifs, "test(%d, \"%[^\")\n]s ", &i,&j);

fflush(stdin);

"를 출력하기 위해서는 \"하는건 알고 계시겠죠 ^^

알기 쉽게 풀어보면 %d(10) 숫자를 받고 , 한 다음에 "표시도 넘기고 %s(sdf)를 ")전 까지 받아라 라는 의미네요 

출처 -  내 머리속 대뇌피질 근처 어딘가에서 ㅡㅡ;;




BLOG main image
Jabi
 Notice
 Category
분류 전체보기 (7)
c/c++ (6)
그래픽 (1)
 TAGS
 Calendar
«   2019/06   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
 Recent Entries
이차원 포인터에 이차원 배열을 넣기
오늘 알게 된 struct의 비밀
typedef에 대해서
괴로운 전처리문 #include, #define, #..
이차원 포인터 동적 할당
 Recent Comments
 Recent Trackbacks
 Archive
2010/05
2009/05
2009/04
 Link Site
 Visitor Statistics
Total : 45,741
Today : 4
Yesterday : 0
rss