ファイルの例


例12.1キーボードからファイルに文字を入力するプログラムを作成します.
#include 

void main()
{
    FILE *fp;
    char c;
    printf("        :");
    scanf("%c",&c);
    if ((fp = fopen("file.txt", "w")) == NULL)
    {
        printf("      
"
); exit(1); } fputc(c,fp); fclose(fp); }
  • ファイルポインタfpを定義する.
  • fopen()関数の戻り値を判断することによりfileを決定する.txtが正常に開くかどうか
  • 入力文字をfpが指すファイルに
  • と書く.
  • fclose()関数を使用してファイルポインタ
  • を閉じる
    例12.2 fputc()関数を使用して、「*」が発生するまで一連の文字列をファイルに書き込む
    #include 
    #include 
    
    void main()
    {
        FILE *fp;
        char c;
        if ((fp = fopen("file.txt", "w")) == NULL);
        {
            printf("      
    "
    ); exit(1); } c = getchar(); while (c != '*') { fputc(c, fp); c = getchar(); } fclose(fp); }

    例12.3ディスクにcfileという名前がある.txtのテキストファイルは、作成プログラムがそのファイルのすべての内容を読み出す.
    #include 
    #include 
    
    void main()
    {
        FILE *fp;
        char c;
        if ((fp = fopen("cfile.txt", "r")) == NULL)
        {
            printf("      
    "
    ); exit(1); } c = fgetc(fp); while (c != EOF) { putchar(c); c = fgetc(fp); } fclose(fp); }

    例12.4既存のdata.txtには10人の学生の情報が格納され,プログラムを記述してファイルの内容を読み出し,画面に表示する.
    #include 
    #include 
    
    struct st
    {
        char name[20];
        int age;
        char sex;
        float score;
    }s[10];
    void main()
    {
        FILE *fp;
        int i;
        if ((fp = fopen("data.txt", "r")) == NULL)
        {
            printf("      
    "
    ); exit(1); } for (i = 0; i < 10; i++) { fread(&s[i], sizeof(struct st), 1, fp); } for (i = 0; i < 10; i++) printf("%s %d %c %f
    "
    ,s[i].name,s[i].age,s[i].sex,s[i].score); fclose; }

    例12.5変形例12.4は、キーボードから10人の学生の情報を入力し、これらの情報をテキストに書き込むことを実現する.
    #include 
    #include 
    
    struct st
    {
        char name[20];
        int age;
        char sex;
        float score;
    }s[10];
    void main()
    {
        FILE *fp;
        int i;
        if ((fp = fopen("student.txt", "w")) == NULL)
        {
            printf("      
    "
    ); exit(1); } for (i = 0; i < 10; i++) scanf("%s %d %c %f", s[i].name, &s[i].age, &s[i].sex, &s[i].score); for (i = 0; i < 10; i++) fwrite(&s[i],sizeof(struct st),1,fp); fclose(fp); }

    例12.6 fprintf()関数を用いて、複数の学生の情報をファイルに書き込む.
    #include 
    #include 
    
    struct st
    {
        char name[20];
        int age;
        char sex;
        float score;
    }s[5];
    void main()
    {
        FILE *fp;
        int i;
        if ((fp = fopen("stud.txt", "w")) == NULL)
        {
            printf("      
    "
    ); exit(1); } for (i = 0; i < 5; i++) scanf("%s%d%c%f",s[i].name,&s[i].sex,&s[i].score); for (i = 0; i < 5; i++) fprintf(fp,"%s %d %c %f",s[i].name,s[i].age,s[i].sex,s[i].score); fclose(fp); }

    例12.7 dataからtxtファイルから画面に情報を読み込む
    #include 
    #include 
    
    struct st
    {
        char name[20];
        int age;
        char sex;
        float score;
    }s[5];
    void main()
    {
        FILE *fp;
        int i;
        if ((fp = fopen("stud.txt", "w")) == NULL)
        {
            printf("      
    "
    ); exit(1); } for (i = 0; i < 5; i++) fscanf(fp,"%s %d %c %f",s[i].name,&s[i].age,&s[i].sex,&s[i].score); for (i = 0; i < 5; i++) printf("%s,%d %c %f
    "
    ,s[i].name,s[i].age,s[i].sex,s[i].score); fclose(fp); }

    例12.8ディスクからファイルを読み込んで画面に表示し、そのファイルの内容を別のファイルにコピーします.
    #include 
    
    void main()
    {
        FILE *fp1, *fp2;
        char c;
        fp1 = fopen("a.txt", "r");
        fp2 = fopen("b.txt", "w");
        while (!feof(fp1))
        {
            c = fgetc(fp1);
            putchar(c);
        }
        rewind(fp1);
        while (!feof(fp2))
        {
            c = fgetc(fp1);
            fputc(c, fp2);
        }
        fclose(fp1);
        fclose(fp2);
    }

    例12.10既存のディスクファイルfile.txt、その内容は以下の通りです.
    #include 
    #include 
    
    void main()
    {
        FILE *fp;
        long p;
        if ((fp = fopen("file.txt", "a+")) == NULL)
        {
            printf("      
    "
    ); exit(1); } p = ftell(fp); printf(" %ld
    "
    ,p); fseek(fp, 0, 2); p = ftell(fp); printf(" %ld
    "
    ,p); fputs("This is a c program!", fp); p = ftell(fp); printf(" %ld
    "
    , p); fclose(fp); }

    例12.11ディスク内の1つのファイルの内容を別のファイルにコピーします.
    #include 
    #include 
    
    void main()
    {
        FILE *fp1, *fp2;
        char ch;
        char in[10];
        char out[10];
        printf("         : ");
        scanf("           :");
        if ((fp1 = fopen(in, "r")) == NULL)
        {
            exit(0);
        }
        if ((fp2 = fopen(out, "w")) == NULL)
        {
            printf("      
    "
    ); exit(0); } while (!feof(fp1)) { ch = fgetc(fp1); fputc(ch, fp2); fclose(fp1); fclose(fp1); } }

    例12.12既存の文書には、名前、学号、および4科目の成績を含む10名の学生の情報が記録されており、文書からデータを読み出し、4科目の平均成績を計算し、別の文書に書くことが要求されている.
    #include 
    #include 
    
    
    void main()
    {
        void f();
        char s[][10] = { "  ","  ","  ","  ","   ","    " };
        f(s);
    }
    void f(char (*p)[10])
    {
        FILE *fp;
        int score[10][4];
        float aver[10];
        char xuehao[10][10], name[10][20];
        char t[5];
        int i, j, k = 0;
        float a[10], *p1;
        p1 = a;
        fp = fopen("stuin.txt","r");
        for (i = 0; i < 10; i++)
        {
            fscanf(fp,"%s",xuehao[i]);
            fscanf(fp,"%s",name[i]);
            for(j=0;j<4;j++)
            fscanf(fp,"%f",score[i][j]);
            *(p1 + i) = (score[i][0] + score[i][0] + score[i][2] + score[i][3]) / 4.0;
        }
        fclose(fp);
        fp = fopen("stuout.txt", "w");
        for (i = 0; i < 10; i++)
        {
            fprintf(fp,"%10s",xuehao[i]);
            fprintf(fp, "%10s", name[i]);
            for (j = 0; i < 4; j++);
            fprintf(fp,"%3d",score[i][j]);
            fprintf(fp,".1f%f",*(p1+i));
        }
        fclose(fp);
        fp = fopen("stuout.txt", "r");
        for (i = 0; i < 10; i++)
        {
            fscanf(fp,"%s",xuehao[i]);
            fscanf(fp,"%s",name[i]);
            for (j = 0; j < 4; j++);
            fscanf(fp,"%d",score[i][j]);
            fscanf(fp, "%f", a[i]);
        }
        for (i = 0; i < 10; i++)
        {
            printf("%10s%10s%3d%3d%3d%3d%6.1f
    "
    ,xuehao[i],name[i],score[i][0],score[i][i],score[i][2],score[i][3],a[i]); } fclose(fp); }

    1、f関数は1つのパラメータ2を受け入れず、doubleからfloatに変換するとデータが失われる可能性がある3、fopen 4、fscanf()5、フォーマット文字列%fはタイプfloatのパラメータを必要とするが、可変パラメータ1はタイプint 6、