사실 이거 만으로 할 꺼리는 아니었는데.... 잠깐 다음 단계 거쳐가기 전에 시험삼아 시도해 본 내용이다.
다음으로 만들 프로그램은 도서관 도서관리 프로그램이다. 일단 그거 만들기 전에 이렇게 시도해 보는 것이다.
일단, 토대가 되는 텍스트 파일은 이렇게 생겼다.
/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;
}
C 언어 예제, fgets 로 정수(숫자) 입력받기 (0) | 2015.03.31 |
---|---|
C 언어 예제, fgets 를 통한 문자열 입력과 표준입력버퍼(stdin) 비우기 (0) | 2015.03.22 |
C 언어 예제, 연결 리스트 연산, 데이터 자유자재로 추가 제거 (0) | 2015.01.08 |
C 언어 예제, 메모리 동적 할당 + 구조체와 노드 다루기 (0) | 2015.01.05 |
C 언어 예제, 동적 할당된 메모리 갯수 바꾸기 (0) | 2015.01.04 |
댓글 영역