• c语言 文件


    1.格式化的输入和输出

      printf   格式化字符串 %[flags][width][.prec][hlL]type

      flags:

         -  :   左对齐

        +  :  前面带正负号

        0  :  0填充  

        space:  正数留空

      

        number  :  最小字符数

        *     :  下一个参数是字符数    //例如 printf("%*d",6,123)    输出   123(123前面有3空格)

      .prec

        .number  :  小数点后的位数

        .*    :  下一个参数是小数点后的位数

      hlL:

        hh     :  单个字节

        h    :  short

        l    :  long

        ll    :  long long

        L    :  long double

      type:

        

      注意 %n,后面要给一个参数num,表示将输出或者读入的个数写入num所在内存中

      scanf:  %[flag]type

      flag:  

        

        type:

      

    2.scanf和printf的返回值

      scanf会返回读入的项目数

      printf会返回输出的字符数(换行也算)

    3.文件输入输出

      linux terminal 中, ./执行文件a  >  文件名b    表示将a程序的执行结果写入到b文件中

               ./执行文件a  <   文件名b    表示将文件b中的数据作为输入,输入给程序a   

    4.程序中使用文件的相关函数

      a. FILE* fp= fopen(const char* restrict path,const char* restrict mode);  //打开文件,第一个是文件名,第二个是读写方式。fopen函数会返回NULL(如果要打开的文件不存在),或者该文件

        FILE的本质:

          FILE本质上是一个结构体,这个结构体中包含了文件相关的一些数据信息

    if((fp=fopen("abc.txt","r"))==NULL)}
      printf("File open error!
    ");
      exit(0);   //exit(0)是系统标准函数,作用是关闭所有打开的文件,并终止程序的执行          
    }

        文件一旦打开,对该文件的操作方式就确定了。

        c语言允许同时打开多个文件,但是同一个文件在关闭之前不能再次被打开。

      b. int fclose(FILE *stream);  

        关闭文件,该函数返回一个整数,若返回值为0表示正常关闭文件,否则表示无法正常关闭文件。

    if(fclose(fp)){
        printf("Can not close the file
    ");
        exit(0);      
    }

        文件使用完之后应当关闭,因为c语言在向文件中写入东西的时候,实际上是把内容写到了一个文件缓冲区(内存)中,通常当文件缓冲区满了之后,操作系统会把缓冲区中的内容写到磁盘上,然后把缓冲区清零,但是最后写入缓冲区的内容不会被写到磁盘上去,而fclose函数可以保证把最后缓冲区中的内容写回磁盘。

        此外,fclose函数还会释放掉文件缓冲区以及FILE结构体。

      c.文件读函数

        char fgetc(FILE* fp)  //从fp所指向的文件中读出一个字符并返回,若读到文件末尾,则返回EOF

        char *fgets(char *str,int n,FILE* fp)  //str可以是字符数组名或字符指针,n是指定读入的字符的个数,fp是文件指针。实际最多只能读取n-1个字符,还有一个是‘’,当读取的时候达到指定字符个数、或遇到换行符,或到达文件末尾的EOF的时候,将会在读取的字符后面自动添加'',其中换行符会被保留,EOF不会被保留。如果文件以及到达末尾(此时再使用fgets)或读取过程中发生异常,fgets会返回NULL。

        fscanf(FILE* fp, 格式字符串(%d %s...可以有多个),输入表)   

      d. 文件写函数

        int fputc(int ch,FILE* fp)  //将ch的ASCII码对应的字符写入文件中,若写文件成功,则返回ch,否则返回EOF

        fputs(const char *str,FILE* fp)  //用来向指定的文本文件写入一个字符串,其中str可以是字符数组名,字符型指针变量或者字符串常量。其中字符串结尾的''不会被写入文件,若函数执行成功,贼返回所写的最后一个字符/0/非负整数(不同编译器不同),否则返回EOF。

        fprintf(FILE*,格式字符串,输出表)

      e. fopen 的第二个参数见下图 

    5.二进制文件

      其实所有的文件最终都是二进制的

      二进制读写

        size_t fread(void *restrict ptr,size_t size, size_t nitems,FILE *restrict stream);    //返回值是成功读写的字节数

        size_t fwrite(const void* restrict ptr,size_t size,size_t nitems,FILE *restrict stream);    //二进制读写往往是对结构体读写,ptr表示开始读写数据的地址的指针,size表示结构体大小,nitems表示有几个这样的结构体,stream表示写到这个文件中去

      在文件中定位

        void rewind(FILE *stream)    //将文件重新定位到文件头

        long ftell(FILE *stream);      //获取文件读写指针的当前位置,返回相对于文件头的位移量(字节数)

        int feof(FILE* fp)  //检测所指示文件是否到达了文件末尾,若是返回非0值,否则返回0

        int fseek(FILE *stream,long offset,int whence);    //stream为文件指针,offset为偏移量,如果使用常量,应该加L。函数执行成功返回0,否则返回 一个非零值

        其中whence的可选值(对应的实值分别是0,1,2):

          SEEK_SET  :  从头开始  

          SEEK_CUR  :  从当前位置开始

          SEEK_END  :  从末尾开始

           例:fseek(fp,20L,0)  //表示把文件指针移动到距离文件头部20字节处

    6.位运算

      C语言中的按运算符:

        &  按位的与      //对应位为1时 结果为1  

            常用于取某一个数据中的一段或者一位

        |  按位的或      //对应位有一个为1时 结果为1

            常用于使得一位或几位为1、把两个数拼接起来

        ~  按位取反      //每一位把1变0,0变1(注意和取补码不同)

        ^  按位异或      //两个位相等,结果为0,不等结果为1.

            A^B=C,  C^B=A  //同一个数异或两次值不变  //可以用B给A编码加密,解密时只需要用B再去异或一次就可以了

            异或可以用来判断两个数是否相等,如果A,B相等,那么A^B=0

        <<  左移    // i<<j   表示将i中的所有位向左移动j个位置,右边用0补齐  x<<=n 等价于x*=2^n

        >>  右移    // i>>j  将i中所有位向右移动j个位置,左边用0补齐,但是符号位保持不变(如果是无符号类型,符号位不会保持不变)  x>>=n  等价于 x/=2^n

            注意 左移右移不要用负数

  • 相关阅读:
    BE Learing 2 名词解释
    mysql学习笔记(二)之一个粗心的问题
    Struts2/XWork < 2.2.0远程执行任意代码漏洞分析及修补
    DataReceivedEventHandler 委托
    JS数组方法汇总 array数组元素的添加和删除
    jQuery学习总结(一)
    js的lock
    mysql学习笔记(一)之mysqlparameter
    Time Span Attack
    Web Vulnerability Scanner 7.0 Patch for 2010_09_21_01
  • 原文地址:https://www.cnblogs.com/foodie-nils/p/13629136.html
Copyright © 2020-2023  润新知