2010.08.18 14:14

  프로그램에서 사용하는 표현과 동일한 표현으로 데이터를 파일에 저장할 때, 그 데이터가 바이너리 형태(binary form)로 저장된다고 합니다.  수치가 문자열로 변환되는 일이 일어나지 않지요.
 표준 입출력의 경우에, fread()와 fwrite() 함수가 이와같은 바이너리 서비스를 제공합니다.

size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

fwrite() 매개변수 설명
- buffer : 저장할 데이터 덩어리의 주소,
- size : 저장할 데이터 덩어리들의 크기,
- count : 저장할 데이터 덩어리들의 수,
- stream : 데이터가 저장될 파일

size_t fread( void *buffer, size_t size, size_t count, FILE *stream );

fread() 매개변수 설명
- buffer : 파일로부터 읽은 데이터를 저장할 메모리 공간의 주소
- size : 데이터들의 크기
- count : 데이터들의 수
- stream : 데이터를 읽을 파일

예제를 보면서 설명하겠습니다.

1. 구조체 선언



2. 구조체 정의 및 파일 입출력
 

 보신것처럼 Book구조체 배열b1에 Book1개의 공간을 정의하고
배열b1의 첫번째 공간에 페이지의 수, 가격, 도서명을 입력 후 20번째 줄의 fwrite()를 이용하여 저장을합니다.
 그 후 읽어드릴때는 Result라는 Book형의 배열을 선언하고 그 첫번째 공간에 fread()함수를 이용하여 옮겨담았습니다.

3. 출력 결과 및 파일입출력 결과


< 실행파일 >
저작자 표시 비영리 변경 금지
신고
Posted by Daos
2010.08.06 02:10

안녕하세요. Daos입니다.

 이번에는 fprintf()와 fscanf()를 이용하여 파일입출력에 대해 알아보겠습니다.
fprintf()와 fscanf()는 printf()와 scanf()와 같은 방식으로 동작하는데 부가적으로 첫번째 전달인자에 적당한 파일을 넘긴다는 점이
다릅니다.
 실제 사용의 예를 보면서 알아봅시다.

간단한 이름, 나이, 시력을 입력받고 파일로 저장. 그리고 불러와서 출력해주는 예제 프로그램입니다.

< Sample Code >


< 출력결과 및 fprintf.txt파일확인 >

저작자 표시 비영리 변경 금지
신고
Posted by Daos
2010.08.01 23:41

 오늘은 fgets(), fputs()에 대해서 알아보겠습니다.
 fgets()와 fputs()는 파일포인터에 문자열을 읽고 쓰는 함수입니다.
 fgets()함수는  읽을 문자들의 최대 개수를 지정함으로써 gets()의 약점( 입력이 확보한 기억 공간에 맞는지 검사하지 않고, 확보한 기억 공간을 채우고 남는 문자들은 이웃한 메모리로 흘러넘친다)을 해결합니다.
 fgets()는 개행 문자를 읽어 그 문자열에 저장하고, n-1개까지 문자들을 읽거나 개행 문자가 나올때 까지 읽습니다.
개행 문자를 읽고 버리는 gets()와는 다르다.
 fputs()함수는 puts()와는 달리 출력할 때 개행 문자를 덧붙이지 않습니다.
 fgets()가 개행 문자를 유지하고, fputs()는 개행 문자를 덧붙이지 않기 때문에 서로 협력하여 잘 동작합니다.

char
*fgets( char *string, int n, FILE *stream );
int fputs( const char *string, FILE *stream );


< 파일입출력 테스트 Source >


<fputs.txt파일 확인>

저작자 표시 비영리 변경 금지
신고
Posted by Daos
2010.07.28 12:38

먼저 fgetc와 fputc를 살펴보겠습니다.

fgetc()와 fputc()는 파일로부터 문자 하나씩을 읽고 쓰는 함수입니다.

int fgetc( FILE *stream );

int fputc( int c, FILE *stream );



 


< 간단한 파일입출력 Test Source >


< 출력 결과 및 파일생성 확인 >


 

저작자 표시 비영리 변경 금지
신고
Posted by Daos
2010.07.26 23:30
구현 일자 : 2009년 01월 12일

   < 도서관리프로그램 동작화면 >

세부적으로 나누면
1. Main화면
2. 전체 데이타 초기화
3. 입력
4. 출력
5. 검색
6. 삭제
7. 종료
로 나누어 구현하였습니다. 1년 6개월 전에 구현한 자료라 기억이 새록새록하네요.ㅎㅎ
꼭 이 방식이 정답은 아닙니다. 또한 이건 저 또한 처음 배울 때 만든거기에 지금봐도 고치고 싶은 마음이 마구마구 쏟지만..
현재 진행하는 프로젝트가 있기 때문에 시간을 투자할 순 없을것 같네요.

지금부터 설명하는 내용은 해당 프로그램의 핵심적인 부분에 대해서 설명할 것입니다.
( Main화면 구성, 입력, 출력, 검색, 삭제 )
 BOOK이라는 구조체와 그 안의 필드에 도서명,가격, 저자를 선언하였고
Count와 비슷한 변수를 활용하여 BOOK Data에 접근하여 정보를 입력하고 보여주고, 삭제하는 기능으로 구현하였습니다.
하나씩 설명해 볼까요.

 
우선 먼저 필요한 BOOK 구조체를 선언해야합니다.


1. Main 화면
기능을 열거형으로 나누어 구분

적당히 메뉴를 디자인합시다. 그 후
 

 2. 입력기능
 

3. 출력기능
 

 4. 검색기능 - 간단하게 도서명으로만 검색하는 기능을 설명하겠습니다. 종류만 다양해질 뿐이지 원리는 똑같으니까요.

6. 삭제기능
 

이런식으로 간단하게 만들어보았습니다.
앞서 말했듯이 위의 소스가 절대 정답이 아니며( 오랜만에 코드봤더니 내가 이렇게 짰었다니..다 뜯어고치고 싶은 욕망을 꾹 참았습니다.)
추가적으로 동적으로 만들고, 데이터를 입력 할 때도 메모리를 효율적으로 할당하면서 하시면 더 나은 프로그램이 될것입니다.
참고하셔서 더 좋은 프로그램을 만드시면 되겠습니다. 감사합니다.
저작자 표시 비영리 변경 금지
신고
Posted by Daos
2010.07.26 21:51
블로그에 소스코드를 포스팅할때의 팁입니다.
하늘다래님의 블로그에 소스코드 넣기란 포스팅된 글과 첨부된 파일( SyntaxHighlighter )를 통하여 
아래와 같은 방식으로 출력되는 기본적인 설정방법을 접하실수있습니다.



하늘다래님의 블로그에 소스코드 넣기

LinkC님의 블로그의 소스코드 포스팅시 팁

아래는 기본적인 사용법 및 몇가지 응용법 관련 된 블로그입니다

마몸님의 블로그 티스토리에서 인용 코드 예쁘게 넣기

그럼 유용하게 사용하셔서 잘 꾸며 쓰시길 바랍니다^^

좋은 정보 포스팅해주신 하늘다래님, LinkC님 그리고 마몸님께 감사드립니다^^
저작자 표시 비영리 변경 금지
신고

'Programming > TIP' 카테고리의 다른 글

[TIP] 블로그에 소스코드 넣기  (2) 2010.07.26
Posted by Daos
2010.07.19 23:00

printf()에서의 포맷 지정자

                                                                      < SourceCode 1 >
                                                                         < 출력결과1 >
                                                                          < SourceCode 2 >
                                                                            < 출력결과2 >
%Nd : 정수 유형의 데이터를 N칸에 맞게 10진수로 출력
%No : unsigned int 유형의 데이터를 N칸에 맞게 8진수로 출력
%Nx : unsigned int 유형의 데이터를 N칸에 맞게 16진수로 출력
%Nu : unsigned int 유형의 데이터를 N칸에 맞게 10진수로 출력
%Nhd : short int 유형의 데이터를 N칸에 맞게 10진수로 출력
%Nho : unsigned short int 유형의 데이터를 N칸에 맞게 8진수로 출력
%Nhx : unsigned short int 유형의 데이터를 N칸에 맞게 16진수로 출력
%Nhu : unsigned short int 유형의 데이터를 N칸에 맞게 10진수로 출력
%Nld : long int 유형의 데이터를 N칸에 맞게 10진수로 출력
%Nlo : unsigned long int 유형의 데이터를 N칸에 맞게 8진수로 출력
%Nlx : unsigned long int 유형의 데이터를 N칸에 맞게 16진수로 출력
%Nlu : unsigned long int 유형의 데이터를 N칸에 맞게 10진수로 출력



%f  : float유형의 데이터를 소수점 형태로 출력 (4byte )
%e : float유형의 데이터를 지수형태로 출력
%lf : double유형의 데이터를 소수점 형태로 출력( 8byte )
%le : double유형의 데이터를 지수형태로 출력
%Lf : long double유형의 데이터를 소수점 형태로 출력( 10byte )
%Le : long double유형의 데이터를 지수형태로 출력

            < SourceCode 3 >

                              < 출력결과3 >

%Nf : 소수점 이하 N개의 숫자만을 출력                                       
ex) %.2f = 소수점 이하 둘째 자리까지 출력

%s : string형태
%p : pointer형태
%c : char형태
저작자 표시 비영리 변경 금지
신고
Posted by Daos
2010.07.16 22:46

  1. 변수(Variable)상수(Constant)
    • 쉽게 설명하면 변수(Variable)란 프로그램이 실행되는 동안 값이 변하거나 대입될 수 있는 것을 말하며, 그렇지 않은 것을 상수(Constant)라고 합니다.
  2. 데이터 형을 나타내는 키워드
    • K&R C 키워드 C90 키워드 C99 키워드
      int signed _Bool
      long void _Complex
      short   _Imaginary
      unsigned    
      char    
      float    
      double    

                                       < C 데이터 키워드 >
    • int 키워드는 C가 사용하는 정수의 기본형.
    • (long, short unsigned)와 ANSI에서 추가된 signed 키워드는 그 기본형의 변형(variation)을 제공하기 위해 사용됨.
    • char 키워드는 알바펫 문자와 #,$,%,* 같은 기타 문자들에 사용되는 데이터형을 표시하며, 작은 정수들을 나타내는데 사용.
    • float, doublelong double소수점이 있는 수를 나타내는데 사용.
    • _Bool형은 불값(boolean value : true와 false) 나타냄.
    • _Complex_Imaginary는 각각 복소수허수를 나타내는데 사용.
  3. 정수형과 부동소수점형
    1. 정수(integer)
      정수는 소수부가 없는 수로 소수점이 있는 형태로 적을 수 없습니다. 정수는 2진수 형태로 저장되는데
      예를 들면 7은 2진 코드 111로 저장됩니다.
    2. 부동소수점수(floating-point number)
      수학에서 말하는 실수(real number)와 어느정도 비슷하며 7은 정수형이지만, 7.00은 부동소수점형입니다. 또한 3.16E7은 3.16에 10의 7승을 곱한 수 입니다.
       그리고 예를들어 1.0과 2.0 사이에 들어 있는 실수의 수는 무한하기 때문에 컴퓨터는 그 범위에 있는 모든값을 부동소수점수로 나타낼 수 없습니다. 그래서 부동소수점 값들은 흔히 실제 값들의 근사값입니다. ex)7.0이 6.99999 float값으로 저장될수도 있습니다.
       + .314159 
      부호 - +                                                            소수부                                      지수부 - 10의 1승 
      = 3.14159                          < 부동소수점 형식으로 저장된 원주율(10진 형태) >           
저작자 표시 비영리 변경 금지
신고
Posted by Daos
2010.07.16 21:54

 키워드란 C가 특별한 용도로 사용하는 어휘들로, 식별자나 변수 이름으로 사용 할 수 없습니다.   
 
      ISO/ANSI C 키워드
auto enum restrict unsigned
break extern return void
case float short volatile
char for signed while
const goto sizeof _Bool
continue if static _Complex
default inline struct _Imaginary
do int switch  
double long typedef  
else register union  

< 볼드체 : ISO/ANSI C90 표준에서 추가된 키워드 / 이탤릭체 : C99 표준에서 새로 추가된 키워드 >

키워드를 가령 변수 이름으로 사용하려 시도하면, 컴파일러가 신택스 에러(syntax error)로 잡아냅니다. 또한 사용하면 안되는 또 다른 식별자들이 있는데, 이들을 예약된 식별자(reserved identifier)라 합니다. 예약된 식별자에는 하나의 밑줄 문자로 시작하는 것들과, printf()처럼 표준 라이브러리 함수들의 이름도 포함됩니다.
저작자 표시 비영리 변경 금지
신고
Posted by Daos
2010.07.14 10:54

 컴퓨터는 수치 코드를 사용하여 문자들을 저장하는데 ASCII 코드(American Standard Code for Information Interchange)는 가장 널리 사용되는 수치 코드 입니다. C언어는 문자 A를 'A'로 나타내는 것과 같이 나타내는데 예를 들어, 라인피드(linefeed, LF) 문자를 '\012' Ehsms '\0xa'와 같이 표시할 수 있습니다. "안녕,\012"와 같이 문자열 안에 이스케이프 시퀀스를 넣을 수도 있습니다.


< ANCII 코드 Extend >




저작자 표시 비영리 변경 금지
신고

'Programming > Programming' 카테고리의 다른 글

ASCII 문자 집합  (0) 2010.07.14
프로그래밍의 일곱 단계  (0) 2010.07.11
Posted by Daos

티스토리 툴바