반응형

임의의 실수 100개를 생성시킨 후에 텍스트 파일과 이진 파일로 저장하여 보고 그 크기를 비교하여 보라.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 100
int main(void)
{
    FILE *fp1=NULL;
    FILE *fp2=NULL;
    int i;
    double arr[SIZE];
    srand((unsigned)time(NULL));
 
    if((fp1=fopen("first.bin","wb"))==NULL)
    {
        printf("파일 오픈 실패1\n");
        exit(1);
    }
    if((fp2=fopen("abc.txt","w"))==NULL)
    {
        printf("파일 오픈 실패2\n");
        exit(1);
    }
    for(i=0;i<SIZE;i++)
    {
        arr[i]=(double)rand()/RAND_MAX; //RAND_MAX는0xfff(32767) 이다. 
    } //c언어의 rand 함수는 0에서 32767을 반환한다. (double)rand();를사용하면 이진파일과 텍스트파일의 크기가 달라진다.
    fwrite(arr,sizeof(double),SIZE,fp1);
    for(i=0;i<SIZE;i++)
    {
        fprintf(fp2,"%lf",arr[i]);
    }
    fclose(fp1);
    fclose(fp2);
    return 0;
 
}
cs





rand 함수를 다르게 다용하면 텍스트 파일과 바이너리 파일의 크기가 다르게 생성되는 경우가 있습니다. 그 이유는 바이너리 상의 특정 문자가

텍스트로 저장될 때 2byte로 저장되기 때문입니다. 줄바꿈 문자인데, 이것 때문에 몇바이트, 많으면 몇십바이트씩 차이가 생기게 됩니다.

따라서 데이터베이스를 저장할 때는 꼭 바이너리 형태로 저장을 하도록 합시다.

참고 블로그 주소 : http://snbosoft.tistory.com/entry/%EB%B0%94%EC%9D%B4%EB%84%88%EB%A6%ACBinary-%ED%85%8D%EC%8A%A4%ED%8A%B8Text-%ED%8C%8C%EC%9D%BC%EC%9D%98-%EC%B0%A8%EC%9D%B4



반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

단어 바꾸기  (0) 2017.02.18
특정 단어 찾기  (0) 2017.02.18
도서 관리 프로그램  (0) 2017.02.17
줄 번호 붙이기  (0) 2017.02.17
사용자 입력 텍스트 파일 저장  (0) 2017.02.13
반응형

소규모의 데이터베이스 프로그램 작성, 자기가 소유하고 있는 도서를 관리하는 프로그램을 작성하여 보자. 다음과 같은 메뉴 화면을 가진다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
typedef struct BOOK {
    char name[SIZE];
    char author[SIZE];
    char company[SIZE];
} book;
int menu(void);
void add(FILE *fp);
void find(FILE *fp);
int main(void)
{
    int num = 0;
    FILE *fp = NULL;
    if ((fp=fopen("booklist.bin","a+"))==NULL)
    {
        printf("파일오픈실패\n");
        exit(1);
    }
    while (1)
    {
        num = menu();
        if (num == 1)
            add(fp);
        else if (num == 2)
            find(fp);
        else
            break;
    }
    fclose(fp);
    return 0;
}
int menu(void)
{
    int i = 0;
    printf("메뉴\n");
    printf("1. 추가\n");
    printf("2. 탐색\n");
    printf("3. 종료\n");
    printf("번호를 입력하세요: ");
    scanf("%d"&i);
    getchar();
    return i;
}
void add(FILE *fp)
    book a;
    printf("도서의 이름: ");
    gets(a.name);
    printf("저자: ");
    gets(a.author);
    printf("출판사명: ");
    gets(a.company);
    fseek(fp, 0, SEEK_END);
    fwrite(&a, sizeof(book), 1, fp);
}
void find(FILE *fp)
{
    char arr[SIZE];
    book find;
    printf("도서의 이름을 입력하세요: ");
    gets(arr);
    fseek(fp, 0, SEEK_SET);
    while (!feof(fp))
    {
        fread(&find, sizeof(book), 1, fp);
        if (strcmp(find.name,arr)==0)
        {
            printf("저자: %s\n",find.author);
            printf("출판사명: %s\n",find.company);
            break;
        }
    }
}
cs




반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

특정 단어 찾기  (0) 2017.02.18
텍스트 파일과 이진 파일  (0) 2017.02.17
줄 번호 붙이기  (0) 2017.02.17
사용자 입력 텍스트 파일 저장  (0) 2017.02.13
인쇄 가능 문자 수 세기  (0) 2017.02.13
반응형

사용자로부터 입력받은 정수를 비트 이동시키는 프로그램을 작성하여 보자. 먼저 정수 변수의 값을 입력받은 후에 이동시킬 방향, 이동할 거리를 사용자로부터 입력받는다. 비트 이동 전후에 정수의 값을 비트로 출력하도록 한다. 앞 문제에서 작성한 display_bit() 함수를 사용한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#define GET_BIT(n,pos) ((n)>>(pos)&0x01)
void display_bit(int value);
int main(void)
{
    int val, move, dist, nval;
    val=0;move=0;dist=0;nval=0;
    while(1)
    {
    printf("정수값을 입력하세요(종료 9999): ");
    scanf("%d"&val);
    if(val==9999)
        break;
    printf("왼쪽 이동은 0, 오른쪽 이동은 1을 입력하세요: ");
    scanf("%d"&move);
    printf("이동시킬 거리: ");
    scanf("%d"&dist);
    printf("이동 전: ");
    display_bit(val);
    if(move==0)
    {
        nval=(val<<dist);
        printf("이동 후: ");
        display_bit(nval);
    }
    else if(move==1)
    {
        nval=(val>>dist);
        printf("이동 후: ");
        display_bit(nval);
    }}
    return 0;
}
void display_bit(int value)
{
    int i,count;
    count=0;
    for(i=31;i>=0;i--)
    {
        if(count==4)
            {printf(" ");
        count=0;}
        if(GET_BIT(value,i))
            printf("1");
        else
            printf("0");
        count++;
    }
    printf("\n");
}
cs




반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

암호화와 복호화  (0) 2017.01.16
대소문자 변경  (0) 2017.01.16
2진수 출력  (0) 2017.01.16
비트 매크로  (0) 2017.01.15
공백 세기  (0) 2017.01.14
반응형

정수값을 받아서 2진수 형태로 출력하는 함수 display_bit(int value) 를 작성하여 보자. 6번에서 정의한 함수 매크로 GET_BIT(n, pos)를 이용한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#define GET_BIT(n,pos) ((n)>>(pos)&0x01)
void display_bit(int value);
int main(void)
{
    int num=0;
    printf("정수값을 입력하세요: ");
    scanf("%d"&num);
    display_bit(num);
    return 0;
}
void display_bit(int value)
{
    int i,count;
    count=0;
    for(i=31;i>=0;i--)
    {
        if(count==4)
            {printf(" ");
        count=0;}
        if(GET_BIT(value,i))
            printf("1");
        else
            printf("0");
        count++;
    }
    printf("\n");
}
cs





반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

대소문자 변경  (0) 2017.01.16
정수 비트 이동  (0) 2017.01.16
비트 매크로  (0) 2017.01.15
공백 세기  (0) 2017.01.14
원기둥의 부피  (0) 2017.01.14
반응형

10진수를 2진수로 변환하여 출력하는 프로그램을 작성하여 보자. 최대 32자리까지 변환이 가능하도록 하라. 변환된 자리수를 저장하는데 배열을 사용하라. 10진수를 2로 나누어서 생성된 나머지를 역순으로 나타내면 2진수로 표현할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#define SIZE 32
void binary(int a[],int x);
int main(void)
{
    int a[SIZE]={0};
    int x;
    printf("정수를 입력하세요: ");
    scanf("%d"&x);
    binary(a,x);
    return 0;
}
void binary(int a[],int x)
{
    int i;
    for(i=0;x>0&&i<SIZE;i++)
    {
    a[i]=x%2;
    x=x/2;
    }
    for(i=SIZE-1;i>=0;i--)
        printf("%d", a[i]);
}
cs




반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

에라스토테네스의 체  (0) 2016.08.14
술에 취한 딱정벌레  (2) 2016.08.13
2차원 행렬  (0) 2016.08.12
재고 관리 시스템  (0) 2016.08.11
벡터 합  (0) 2016.08.11

+ Recent posts