PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2009/04/15 23:08:17
Name 레이미드
Subject 간단한 c언어 질문입니다..
abc.txt 라는 파일을 읽어서 여기에 들어있는 문자열을 2차원 배열에 저장하는 예제인데요.

abc.txt 에 다음과 같은 내용이 들어있습니다.

000
111
001
000

010
000
010
000

첫번째 단락(1번째~4번째 줄)의 문자열을 aa[][] 라는 2차원 배열에 집어넣고
두번째 단락(6번째~9번째 줄)의 문자열을 bb[][] 라는 2차원 배열에 집어넣을건데요.
(그러니까 a[0][0] 은 0, a[1][0] 은 1 (111 의 맨 앞)
b[0][0] 은 0 이 되고, b[0][1]은 1 (010 의 1)  <- 이런 식으로 배열에 저장하고 싶습니다.)

이걸 이중 for 문과 fscanf 를 사용해서 코딩해봤는데
엔터(\n) 때문에 맨 밑에 숫자 2,3개가 배열에 안 들어가더라구요.
이런 문제는 어떻게 해결할 수 있을까요..?

--------------------------------------------------------

개략적인 코드입니다.

  

35     FILE *fp = fopen(argv[1], " r ");
36   for(i=0; i<4; i++) {
37     for(j=0; j<4; j++)
38       fscanf(fp, "%c", &aa[i][j]);
39    
40   }
41
42   fscanf(fp, "%*c");
43   fscanf(fp, "%*c");
44
45
46   for(i=0; i<4; i++) {
47     for(j=0; j<4; j++)
48       fscanf(fp, "%c", &bb[i][j]);
49    
50   }

위에 배열에 입력한 자료가 잘 들어갔나 출력을 해보면요.

000
111
001
00

010
000

이렇게 나오네요.. 뭔가 꼬인 것 같은데;; 어떻게 고쳐야할지 막막합니다.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
MoreThanAir
09/04/15 23:26
수정 아이콘
라인을 통째로 읽는 함수를 쓰는게 편해보이지만 굳이 fscanf로 하시겠다면
일단 배열은 4*3배열인데 for루프는 4*4 루프입니다.
따라서 그걸 바꿔줘야겠고... 각 행이 끝날 때마다 개행문자(\n)를 처리해야겠네요.
그걸 생각하고 대충 해보면

for(i=0; i<4; i++)

for(j=0; j<3; j++)
{
fscanf(fp, "%c", &aa[i][j]);

fscanf(fp,"%c",&temp);
}

이런식의 루프구조가 되어야 합니다. 개행문자는 그냥 임시변수에 던져 버리고 숫자 값들만 배열에 저장하는거죠.
MoreThanAir
09/04/15 23:28
수정 아이콘
첨언하자면 이런 식의 문제를 처리할 때 머리로 일단 분석을 하는 것이 먼저겠지만 프로그램 실행을 TRACE하는 것이 중요해요. 디버깅 툴 사용법을 먼저 익히시기를 권해드립니다.
레이미드
09/04/15 23:28
수정 아이콘
라인을 통째로 읽는 함수라 하면
따로 그런 함수를 만드는게 낫다는건가요?

저도 굳이 fscanf 로 하려는 생각은 없어서요.
한 라인씩 읽으려면 fgets 함수를 써야할까요..?
MoreThanAir
09/04/15 23:31
수정 아이콘
일단 열의 크기를 알고 있다면 fgets등으로 한 행을 바로 읽어오는게 편하겠죠.
09/04/16 11:19
수정 아이콘
char szTmp[8];
fgets( szTmp, 8, fp );
for ( int i = 0 ; i < 3 ; i++ ) a[0][i] = szTmp[i] - '0';

이런식으로 만들면 좀더 편하겠죠? 좀 꼼수긴 하지만...
09/04/16 19:29
수정 아이콘
AhnGoon님// 크크크크 그야말로 경험이 녹아있는 꽁수군요 크크크크
레포트에 낼 거라면 저러면 아마 교수님이 싸늘하게 쳐다볼겁니다. 크크크크
현장에서야 물론 강추-_-b
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
53934 공부 하실때 이런분들 있나요? [9] Yourfragrance..2102 09/04/15 2102
53933 팝송 해석 부탁드립니다 ;; [2] deadbody2201 09/04/15 2201
53932 틱장애 치료에 대해 아시는분 계신가요? [5] 꼬비3144 09/04/15 3144
53931 간단한 c언어 질문입니다.. [6] 레이미드4600 09/04/15 4600
53930 아쿠아플레이어 오류에관해 아시는분... 도움좀주세요 ㅠㅠ 랄랄라4189 09/04/15 4189
53929 컴퓨터 학원의 필요성에 대해서. [1] prestonia1803 09/04/15 1803
53928 밴드-여자보컬 노래 추천부탁드립니다 [21] TecH)CrYstaL12693 09/04/15 12693
53927 귓볼 안에 뭐가 자꾸 생깁니다 [25] 삭제됨20914 09/04/15 20914
53926 스타만 실행하면 팬이 돌아갑니다 [1] 루카와1760 09/04/15 1760
53925 상대방한테 무슨 말을 하려고 말을 걸었는데 할 말이 생각나지 않을 때 있으신가요? [4] kiss1794 09/04/15 1794
53924 햅틱2 핸드폰으로 할만한 모바일 게임 있을까요??? [4] 성세현2474 09/04/15 2474
53923 내기 관련 아콘관련 질문입니다;. [17] L.H.k2183 09/04/15 2183
53922 주민등록증발급에 관한 질문입니다 [2] 치토스2075 09/04/15 2075
53921 딜레마입니다 ㅠㅠ [4] 뒤질랜드1876 09/04/15 1876
53920 VS2008 로 C# 을 배워보려고 합니다. [3] 본호라이즌1547 09/04/15 1547
53919 저번에 올린 상담에 이어 또다시..(연애) 좀 길어요 죄송합니다.. [7] 개그맨1792 09/04/15 1792
53918 비밀번호 해킹 위험에 관한 질문... [1] 공방풀업아칸1583 09/04/15 1583
53917 대학병원의 실체는..? [7] 세느2134 09/04/15 2134
53916 토스vs토스에서 장기전 어떻게 하시나요? [4] 킹이바1904 09/04/15 1904
53915 이 링크의 Micro-SD 정품 맞나요? [5] 회전목마2111 09/04/15 2111
53914 컴퓨터 연결 질문입니다 [4] 핸드레이크1614 09/04/15 1614
53912 헬스시간대상담부탁드립니다 [4] 상이2130 09/04/15 2130
53911 재무계산기 사용때문에 질문 있습니다. [3] Schizo2099 09/04/15 2099
목록 이전 다음
댓글

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