C文件

用二进制方式向文件读写一组数据

fread(buffer,size,count,fp);

fwrite(buffer,size,count,fp);


fread;

#include<stdio.h>

#define SIZE 10

struct student_type
{
    char name[10];
    int num;
    int age;
    char addr[15];
}stud[SIZE];

void save()
{
    FILE *fp;
    int i;
    if((fp=fopen("stu.dat","wb"))==NULL)
    {
        printf("cannot open file\n");
        return ;
    }
    for(i=0; i<SIZE; i++)
        if(fwrite(&stud[i],sizeof(struct student_type),1,fp)!=1)
            printf("file write error\n");
    fclose(fp);
}

int main()
{
    int i;
    printf("Please enter data of student :\n");
    for(i=0; i<SIZE; i++)
        scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
    save();
    return 0;
}


fwrite(buffer,size,count,fp);


#include<stdio.h>
#include<stdlib.h>
#define SIZE 10
struct Student_type
{
    char name[10];
    int num;
    int age;
    char addr[15];
}stud[SIZE];

int main()
{
    int i;
    FILE *fp;
    if((fp=fopen("stu.dat","rb"))==NULL)
    {
        printf("cannot open file\b");
        exit(0);
    }
    for(i=0;i<SIZE;i++)
    {
        fread(&stud[i],sizeof(struct Student_type),1,fp);
        printf("%-10s %4d %4d%-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
    }
    fclose(fp);
    return 0;
}


随机读写数据文件

1.文件位置标记

rewind()是文件位置标记指向文件开头


#include<stdio.h>

int main()
{
    FILE *fp1,*fp2;
    fp1=fopen("file1.dat","r");
    fp2=fopen("file2.dat","w");
    while(!feof(fp1))  putchar(getc(fp1));
    putchar(10);
    rewind(fp1);
    while(!feof(fp1)) putc(getc(fp1),fp2);
    fclose(fp1);
    fclose(fp2);
    return 0;
}

fseek(文件类型指针,位移量,起始点);


SEEK_SET    0  起始位置

SEEK_CUR   1  当前位置

SEEK_END   2  文件末尾位置

fseek(fp,100L,0);

fseek(fp,50L,1);

fseek(fp,-10L,2);

ftell(fp)  //获取当前位置;

i=ftell(fp);

if(i==-1L) printf("error\n");

磁盘文件上存有10个学生的数据。要求将第1,3,5,7,8,9个学生数据输入计算机,并在屏幕上显示出来。

#include<stdio.h>
#include<stdlib.h>
struct Student_type
{
    char name[10];
    int num;
    int age;
    char addr[15];
}stud[10];

int main()
{
    int i;
    FILE  *fp;
    if((fp=fopen("stu.dat","rb"))==NULL)
    {
        printf("can not open file\n");
        exit(0);
    }
    for(i=0;i<10;i+=2)
    {
        fseek(fp,i*sizeof(struct Student_type),0);
        fread(&stud[i],sizeof(struct Student_type),1,fp);
        printf("%-10s %4d %4d %-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
    }
    fclose(fp);
    return 0;
}


ferror(fp)//如果返回值为0(假),表示为出错;如果返回一个非零值,表示出错。

clearerr(fp)//clearer的作用是使文件错误标志和文件结束标志置为0,







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值