zoukankan      html  css  js  c++  java
  • 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

            注意 左移右移不要用负数

  • 相关阅读:
    POJ 1795 DNA Laboratory
    CodeForces 303B Rectangle Puzzle II
    HDU 2197 本源串
    HDU 5965 扫雷
    POJ 3099 Go Go Gorelians
    CodeForces 762D Maximum path
    CodeForces 731C Socks
    HDU 1231 最大连续子序列
    HDU 5650 so easy
    大话接口隐私与安全 转载
  • 原文地址:https://www.cnblogs.com/foodie-nils/p/13629136.html
Copyright © 2011-2022 走看看