상세 컨텐츠

본문 제목

C 언어 예제, text(메모장) 파일에서 입력받기

컴퓨터 관련/C 언어 예제

by 열정과 함께 2015. 1. 18. 01:35

본문

사실 이거 만으로 할 꺼리는 아니었는데.... 잠깐 다음 단계 거쳐가기 전에 시험삼아 시도해 본 내용이다.


다음으로 만들 프로그램은 도서관 도서관리 프로그램이다. 일단 그거 만들기 전에 이렇게 시도해 보는 것이다.


일단, 토대가 되는 텍스트 파일은 이렇게 생겼다.



/1, /2 하는 부분은 구조체가 달라지는 경계를 표현하기 위해 넣은 것이다.


결과는 이렇게 만들 수 있도록 하는 것. 이걸 만들면서 좀 느꼈던 게 있다면....


1) scanf 건 fscanf 건 int 자료형을 받을 때는 자료형이 들어갈 인자 앞에 & 가 있어야 된다. 어떻게 보면 너무 당연한 건데 까먹고 있었다.....


2) while 이 열리는 부분에서 

while((c=fgetc(stream1)) != EOF)

{

if((c=fgetc(stream1)) == '/')

{


} .....

이런 식으로 처리하려고 했는데 잘 안 됐다. 어떤 형식이 됐던지 간에 한번 읽으면 position indicator 는 그대로 옆으로 옮겨가는 듯.

3) fscanf 쓴 다음에 fgetc 로 해서 개행문자를 처리해 줘야 하지 않을까 생각했는데 그럴 필요 없다. 그냥 해도 된다.



아래는 코드이다.


#include <stdio.h>

#include <stdlib.h>

struct table

{

int num;

char stat1[50];

char stat2[50];

char stat3[50];

};

int main()

{

struct table data[2];

int i=0;

char c;

int d;

FILE *stream1 = fopen("test.txt", "r+");

if(stream1 == NULL)

{

printf("열지 못했습니다. \n");

return 0;

}

while((c=fgetc(stream1)) != EOF)

{

if(c == '/')

{

fscanf(stream1, "%d", &data[i].num);

fscanf(stream1, "%s", data[i].stat1);

fscanf(stream1, "%s", data[i].stat2);

fscanf(stream1, "%s", data[i].stat3);

i++;

}

}

fclose(stream1);

printf("데이터 점검 \n");

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

{

printf("data[%d] 의 자료 \n", i);

printf("data[%d].stat1 : %s \n", i, data[i].stat1);

printf("data[%d].stat2 : %s \n", i, data[i].stat2);

printf("data[%d].stat3 : %s \n", i, data[i].stat3);

}

return 0;

}



관련글 더보기

댓글 영역