C语言文件代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
// 文件有二进制文件和文本文件,里面的数据和类型
// 单个字符慢慢输出
void test_fgetc_fputc(){
    char file_name[20]="./data—file.txt";
    FILE * fp=fopen (file_name, "w") ; //打开文件
    int c; //c:接收fgetc的返回值,定义为int,而非char M
    if(NULL==fp)
    {
        printf ("Failed tO open the file !\n");
        exit(0);
    }
    printf ("请输入字符,按回车键结束:");
    while ((c=fgetc (stdin)) != '\n') //stdin:指向标准输人设备键盘文件
    {
        fputc (c, stdout); //stdout:指向标准输出设备显示器文件
        fputc(c,fp);
    }
    fputc ('\n', stdout);
    fclose (fp); //关闭文件
}

void test_fgets_fputs(char file_name[] ,int N){
    char str[30];
    FILE *fp;
    int i;
    fp=fopen (file_name, "w+") ; //"w+"模式:先写入后读出
    if(NULL==fp)
    {
        printf ("Failed to open the file !\n");
        exit (0);
    }
    printf ("请输入%d个字符串:\n",N);
    for(i=0;i<N;i++)
    {
        printf ("字符串%d:",i+1);
        fgets (str,30, stdin) ;//从键盘输入字符串,存入str数组中
        fputs (str, fp) ;//把str中字符串输出到fp所指文件中
    }
    rewind (fp); //把fp所指文件的读写位置调整为文件开始处
    while (fgets(str,30,fp) !=NULL)
    {
        fputs (str, stdout) ; //把字符串输出到屏幕
    }
    fclose(fp);
}

void test_fscanf_fprintf(char name_file[]){
    int a,b;
    char s[30];
    FILE *fp=fopen(name_file,"r");
    if(NULL==fp)
    {
        printf ("Failed to open the file!\n");
        exit (0);
    }
    fscanf (fp,"%d%d%s",&a,&b,s) ; //从fp所指文件中读取一个整数保存到变量a中
    fclose(fp);
    printf("%d,%d %s",a,b,s);
    fp=fopen(name_file,"a"); // 追加模式
    char name[ 10] ="张三";
    char no[15]="20170304007";
    int age=17;
    if(NULL==fp)
    {
        printf ("Failed to open the file !\n");
        exit (0);
    }
    fprintf(fp,"%s\t%s\t%d\n",name,no,age); // 将一些字符写入文件
    fclose(fp);
}

// 二进制文件的读取和写入 #include<stdio.h>
/*
    unsigned fread (void *buf, unsigned size, unsigned count, FILE* fp);
    -- buf:指向存放数据块的内存空间,该内存可以是数组空间,也可以是动态分配的内存。void类型指针,故可存放各种类型的数据,包括基本类型及自定义类型等。
    -- size:每个数据块所占的字节数。
    -- count:预读取的数据块最大个数。
    -- fp:文件指针,指向所读取的文件。

    unsigned fwrite (const void *bufAunsigned size,unsigned count,FILE* fp);
    -- buf:前加const的含义是buf所指的内存空间的数据块只读属性,避免程序中有意或无意的修改。
    -- size:每个数据块所占的字节数。
    -- count:预写入的数据块最大个数。
    -- fp:文件指针,指向所读取的文件。

    int fseek(FI:LE *fp, long offset, int origin);
    1) origin:文件读写指针移动的基准点(参考点)。基准位置 origin 有三种常量取值:SEEK_SET、SEEK_CUR 和 SEEK_END,取值依次为 0,1,2。

    SEEK_SET:文件开头,即第一个有效数据的起始位置。
    SEEK_CUR:当前位置。
    SEEK_END:文件结尾,即最后一个有效数据之后的位置。注意:此处并不能读取到最后一个有效数据,必须前移一个数据块所占的字节数,使该文件流的读写指针到达最后一个有效数据块的起始位置处。

    2) offset:位置偏移量,为 long 型,当 offset 为正整数时,表示从基准 origin 向后移动 offset 个字节的偏移;若 offset 为负数,表示从基准 origin 向前移动 |offset| 个字节的偏移。
    
    返回值:成功,返回 0;失败,返回 -1。
*/
typedef struct {
    char name[10];
    int age;
    char duty[20];
}Animal;
void test_fread_fwrite_fseek(){
    int N=3;
    Animal a[3] = {{"Judi",5, "police"}, {"Nike", 8, "aidpolice"},{"flash",10, "worker"}},t;
    int i;
    FILE *fp=fopen ("Animal_Info.bat", "wb+");
    if(NULL==fp)
    {
        printf("Failed to open the file!\n");
        exit (0);
    }
    fwrite(a,sizeof(Animal),N,fp);
    fprintf (stdout, "%s\t%s\t%s\n", "name","age","work");
    for(i=1;i<=N;i++)
    {
        fseek(fp,(i-1)*sizeof(Animal),SEEK_SET);
        fread(&t,sizeof(Animal),1,fp);
        fprintf (stdout, "%s\t%d\t%-s\n", t.name,t.age,t.duty);
    }
    fclose(fp);
}

void test_feof(char name_file[]){
    FILE *fp;
    char ch;
    fp=fopen(name_file,"r");
    ch=fgetc(fp);//先读取一个字符
    while(!feof(fp))// 判断指针是不是末尾 当前位置指针指向文件末尾时返回0,返回非零值
    {
        putchar(ch);
        ch=fgetc(fp);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值