• 文件学习


     1   FILE* fp;
     2     char ch,filename[10];
     3     printf("请输入所用的文件名:");
     4     scanf("%s",filename);
     5     if((fp = fopen(filename,"w"))== NULL)
     6     {
     7         printf("无法打开此文件");
     8         exit(0);
     9     }
    10     ch = getchar();//存入scanf后的换行
    11     printf("请输入一个准备存储到磁盘的字符串(以#结束)");
    12     ch = getchar();
    13     while(ch != '#')
    14     {
    15         fputc(ch,fp);
    16         putchar(ch);
    17         ch = getchar();
    18     }
    19     fclose(fp);
    20     putchar(10);//输出一个换行符
    21     return 0;

    这是基本的文件打开与关闭,输出(fputc)得操作,自动创建文件创建在该程序源文件所在得文件夹下。因为可能打开失败,所以做一个if判断,如果失败可以及时跳出;C里面的输入要注意scanf是不吃回车的,要用getchar()吃掉

    创建的文档类型是文件,如果想要创建的文件名有.txt后缀,那么创建的就是txt,也会自动匹配已经创建的txt文档

    “w"是进行输出到文件,如果原来存在你想要输出的文件,那么,就会将原来的文件清空,再进行输出

    ”a"进行补充,在文件末尾继续输出,不会自动换行

    输出到文件的可以是中文啊(真的厉害)如下这样就输出不了中文

       char ch = '';
       printf("qq%cqq",ch);

    接下来联系一下fputc()和fgetc()

     1 void change_file(char changefilename[],char newfilename[])
     2 {
     3     FILE *fp1,*fp2;
     4     if((fp1 = fopen(changefilename,"r")) == NULL)
     5     {
     6         printf("无法打开此文件");
     7         exit(0);
     8     }
     9     if((fp2 = fopen(newfilename,"w")) == NULL)
    10     {
    11         printf("无法打开此文件");
    12         exit(0);
    13     }
    14     char ch;
    15     while(!feof(fp1))
    16     {
    17         ch = fgetc(fp1);
    18         fputc(ch,fp2);
    19         putchar(ch);
    20     }
    21     fclose(fp1);
    22     fclose(fp2);
    23 }

    feof()函数可以检查文件读写位置(文件指针的指向)是否到了末尾,是为真(1),否为假(0)

    接下来单个单个的字符拷贝太麻烦了,直接来个字符串的操作吧fgets(),fputs()

     1 void insert_stofile(char str[][10],int n,char filename[],char way[])
     2 {
     3     FILE *fp1;
     4     if((fp1 = fopen(filename,way)) == NULL)
     5     {
     6         exit(0);
     7     }
     8     for(int i = 0;i < n;i++)
     9     {
    10         fputs(str[i],fp1);
    11         fputs("
    ",fp1);
    12         puts(str[i]);
    13     }
    14 }

    fputs()向文件写入字符串时要注意应人工分开所传入的字符串,方便只读时输入到计算机

     1 void read_sfromfile(char filename[],char way[])
     2 {
     3     FILE *fp;
     4     char str[10][10];
     5     int i = 0;
     6     if((fp = fopen(filename,way)) == NULL)exit(0);
     7     while(fgets(str[i],1024,fp) != NULL)
     8     {
     9         i++;
    10     }
    11     for(int j = 0;j < i;j++)
    12     {
    13         //puts(str[j]);//自动换行了,重复换行了,因为我把换行当作了,文件中字符的分割
    14         printf("%s",str[j]);
    15     }
    16 }

    fgets()成功返回str的地址,失败返回NULL

    二进制方式的读写,常用于结构体

    fread()

     1   FILE *fp ;
     2     fp = fopen("stofilesort.txt","ab+");
     3     char str2[100];
     4     int i;
     5 //    for(i = 0; i < 2;i++)
     6 //    {
     7 //        fread(&str2[i],1,2,fp);
     8 //        printf("i = %d
    ",i);
     9 //    }
    10     fread(&str2,2,1,fp);//注意在末尾添加结束标志
    11     str2[2] = '';
    12     printf("str2 = %s
    ",str2);
    13     fclose(fp);

    fwrite()

    1  char str[][10]={"def","abc","bcd"};
    2     sort_string_xiao(str,3);
    3     FILE *fp ;
    4     fp = fopen("stofile.txt","wb+");
    5     fwrite(str,10,3,fp);//注意在末尾添加结束标志
    6     //将三维数组读入文件了
    7     fclose(fp);

    难点所在就是要注意size 与count的参数设定

    两个函数成功后都返回coount

    然后随机读写,要明白两个函数吧rewind(fp);使文件指针指向开头

    fseek(fp,位移量,起始点)以起始点为基点,前为正方向,位移,数字末尾加L

    起始点:0表示文件开头,1表示当前位置,2表示文件末尾

    然后就多打一下代码训练训练吧~~

  • 相关阅读:
    Kubernetes之集群安装⭐
    Kubernetes之资源清单🌌
    Kubernetes之kubectl使用🍃
    Kubernetes之Harbor仓库🌳
    Set
    javascript输出
    统一码
    CTF入门——密码学基础
    WPA加密数据包简单破解aircrackng
    记一次靶场考核
  • 原文地址:https://www.cnblogs.com/DF-yimeng/p/8193693.html
Copyright © 2020-2023  润新知