PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2009/04/09 12:46:58
Name DeathMage
Subject atoi와 strtok 사용법 질문..
sample.txt라는 파일의 내용이,

31 70 21 50
60 12 32 54 32 49
44 55 11 12 55 33

이렇게 있다고 할 시 (각 라인의 숫자 데이터값의 개수는 달라짐, 숫자의 구분은 공백으로 구분.)

fscanf로는 데이타 개수 제한이 없기 때문에 받기 힘들꺼라고 생각되어서 fgets로 받았습니다.

#include <stdio.h>
#include <string.h>

char str[50], *ptr;
FILE *fp = fopen("sample.txt, "r");

int main(){
        while(1){
                ptr = fgets(str, sizeof(str),fp);
                if(ptr == NULL) break;                
                str[strlen(str)-1] = '\0';
                puts(str); //화면에 문자열 저장 결과를 띄움
        }
fclose(fp);
return 0;
}


이렇게 한다면 str배열에 문자열로 숫자들이 저장이 될것인데, 이것을 연산을 하기 위해서 atoi를 쓰고, 공백 구분을 위해 strtok를 쓰라고

하더군요.. 그런데 MSDN을 봐도 어떻게 쓰는지 모르겠습니다.

strtok을 쓸시에, ptr = strtok(str. " "); 이렇게 쓰는것이 맞는지,

atoi를 쓸때 하나의 배열을 더 선언 해서 배열 = atoi(ptr); 이런식? 으로 하면 되는지..

이해가 잘 안되네요.. 도와주실분?

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
DeathMage
09/04/09 12:55
수정 아이콘
자문 자답이긴 한데
생각을 해봤는데 혹시 이런 식으로 될려나 모르겠네요.
fscanf("%d %d ", 변수, 변수);
if(fgetc(fp) == "\n") break; 이런식으로? 이제 수업시간이라서 돌려보질 못하겠네요
화이트푸
09/04/09 13:12
수정 아이콘
char seps[] = "-\t\n";

while(fgets(buffer, 50, fin))

token1 = strtok(buffer, seps);
token2 = strtok(NULL, seps);
token3 = strtok(NULL, seps);


하나의 예인데 token은 \t나 \n - 으로 구분되는 모든것을 자르고
한번 버퍼(문자열)값을 읽어 들이면 다음에 토큰할때는 NULL값을 줘야 합니다.
이런식으로 끝까지 읽어 들이면 될꺼 같은데 개수가 정확하지 않으니까 그에 대한 조건문은 존재 해야 할듯 싶습니다.
09/04/09 14:11
수정 아이콘
while( fgets( buf, 50, fp ) )

char *token = strtok(buf, seps)
if ( token == NULL ) continue;
int data = atoi(token);
// data 에 대한 어떤 처리를 한다...

// 남아있는 데이터들을 읽는다.
while( token = strtok( NULL, seps ) )
{
data = atoi(token);
// data 에 대한 어떤 처리를 한다...

}

대략 이런식이면 될 것 같은데요. 빌드해보고 올리는게 아니라서, 버그가 있을지도 모릅니다. ^^;
strtok는 텍스트 파싱 같은거 짜야 할 경우에 거의 필수니까, 사용법을 잘 익혀두시는게 좋습니다.
물론 C++로 넘어가면, iostream을 쓰면 걍 해결되긴 합니다만(...)
Cazellnu
09/04/09 14:33
수정 아이콘
atoi는 최소한 널바인딩이라던지 그런게 되어있어야 됩니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
53537 수영과 자전거의 다이어트 효과에 대해서 문의 드립니다. [6] 허접플토3098 09/04/09 3098
53536 홈페이지 제작 질문입니다. 제로보드에서 레이아웃 적용법 [5] 래토닝2085 09/04/09 2085
53533 pmp o2를 사려고 합니다. [4] 하늘에속한이1826 09/04/09 1826
53531 슬라이딩 좋은 마우스패드 알려주세요 [5] anti-dispell2546 09/04/09 2546
53529 영화추천좀해주세요^.^ [3] 풍년가마2072 09/04/09 2072
53528 네비게이션 추천 좀 해주세요~ 한가지2071 09/04/09 2071
53527 헝겊책 어디에서 사는 게 좋나요? [2] 미남주인2145 09/04/09 2145
53526 신용장 관련 질문입니다. 정우석1719 09/04/09 1719
53525 투자론 관련 질문입니다 엑스칼리버1682 09/04/09 1682
53524 5팩 타이밍 러쉬를 못막겠어요! [3] 김재혁3126 09/04/09 3126
53522 뉴질랜드 여학연수에 관해 질문드립니다 [4] Enjoy1810 09/04/09 1810
53521 솔로가수 '태양'군같은 근육 만들기 전략 조언 부탁드립니다... [32] 악학궤범a4270 09/04/09 4270
53520 노래 제목이 궁금합니다. [2] Dizzy2128 09/04/09 2128
53519 기업에서 이런건 많이 싫어하나요? [5] 하얀거탑2170 09/04/09 2170
53518 atoi와 strtok 사용법 질문.. [4] DeathMage2647 09/04/09 2647
53517 스타할 때 타케팅 생기는 것에 대한 질문입니다. [3] 랑맨1941 09/04/09 1941
53516 Windows Meida 질문 [4] 길버그1556 09/04/09 1556
53514 익스플로러8 업데이트후 싸이트가 안들어가지네요 [7] 폭풍간지2617 09/04/09 2617
53513 컴퓨터 고수님들 봐주세요~ 도련님.2119 09/04/09 2119
53512 노무현-정몽준 후보단일화 당시에... BluSkai2143 09/04/09 2143
53511 연애상담해주세요 (고백) [2] 쭈니2279 09/04/09 2279
53510 노트북 공유기 관련 질문입니다~!! [4] gL1856 09/04/09 1856
53509 컴퓨터 관련 질문 드립니다. ( 메인보드 ) [7] 海軍 - 바리1862 09/04/09 1862
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로