zoukankan      html  css  js  c++  java
  • C语言中数据输入输出到文件操作freopen()函数(1)

    例题一、把短句 “Hello World!” 保存到磁盘文件f1.txt中。

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        FILE *fp;                                     /* 定义文件指针*/
    
        if( ( fp = fopen("f1.txt", "w") ) == NULL){    /* 打开文件 */
               printf("File open error!
    ");
               exit(0);
        }
        fprintf( fp, "%s", "Hello World! " );            /* 写文件 */    
    
            if( fclose( fp ) ){                         /* 关闭文件 */
            printf( "Can not close the file!
    " );
            exit(0);
        }
    
        return 0;
    }

    用文件指针指示文件缓冲区中具体读写的位置
    FILE   *fp;

    自定义类型(typedef):

    1、将C语言中的已有类型(包括已定义过的自定义类型)重新命名
    2、新的名称可以代替已有数据类型
    3、常用于简化对复杂数据类型定义的描述
    typedef  <已有类型名>  <新类型名>;

    typedef  int   INTEGER;
               int  i, j;       <====>    INTEGER  i, j;  
    
    typedef   int*  POINT;
               int*  p1;       <====>    POINT  p1;  

    自定义类型(typedef)的使用方法

    1、定义变量            int  i
    2、变量名新类型名      int  INTEGER
    3、加上 typedef                 typedef  int  INTEGER
    4、用新类型名定义变量        INTEGER  i;


    int NUM[10]
    typedef   int  NUM[10]
    NUM   a  <===>  int a[10]

     例题二

    已知一个数据文件f.txt中保存了5个学生的计算机等级考试成绩,包括学号、姓名和分数,文件内容如下,请将文件的内容读出并显示到屏幕中。
     
    301101  张文   91
    301102  陈慧   85
    301103  王卫东  76
    301104  郑伟   69
    301105  郭温涛   55

    #include "stdio.h"
    int main(void)
    {       FILE * fp;                                        /* 定义文件指针*/
           long num;
           char stname[20];
           int  score;
          if((fp = fopen("f.txt", "r")) == NULL){      /* 打开文件  */
               printf("File open error!
    ");
               exit(0);
        }
    
            while( !feof(fp) ){
               fscanf(fp, "%ld%s%d", &num, stname, &score);
                  printf("%ld    %s %d
    ", num, stname, score);  
        };
    
        if( fclose(fp) ){                        /* 关闭文件  */
                printf( "Can not close the file!
    " );
                exit(0);
        }
    }
    if((fp = fopen("f.txt", "r")) == NULL){
        printf("File open error!
    ");
        exit(0);
    }
    fopen("文件名""文件打开方式")
    
    函数fopen() 的返回值
    1、执行成功,则返回包含文件缓冲区等信息的FILE型地址,赋给文件指针fp
    2、不成功,则返回一个NULL(空值)
       exit(0):关闭所有打开的文件,并终止程序的执行
       参数0表示程序正常结束;非0参数通常表示不正常的程序结束

    fp = fopen("f.txt", "r")文件打开方式参数表

    文件读写与打开方式

    if 读文件
        指定的文件必须存在,否则出错;
    if 写文件(指定的文件可以存在,也可以不存在)
        if"w" 方式写
            if 该文件已经存在
                原文件将被删去重新建立;
            else 
                按指定的名字新建一个文件;
        else if"a" 方式写
            if 该文件已经存在
               写入的数据将被添加到指定文件原有数据的后面,不会删去原来的内容;
            else 
                按指定的名字新建一个文件(与“w”相同);
    if  文件同时读和写
            使用 "r+""w+""a+" 打开文件 

    关闭文件

    if( fclose(fp) ){
        printf( "Can not close the file!
    " );
        exit(0);
    }
    
    fclose(文件指针)
    把缓冲区中的数据写入磁盘扇区,确保写文件的正常完成
    释放文件缓冲区单元和FILE结构体,使文件指针与具体文件脱钩。
    
    函数fclose() 的返回值
    返回0:正常关闭文件
    返回非0:无法正常关闭文件

    文件复制

    已知一个文本数据文件f1.txt,请将该文件复制一份,保存为f2.txt。

    新建一个文本文件f1.txt,将该文件与源程序放在同一目录下,执行程序,观察结果。

    #include <stdio.h>
    int main(void)
    {       FILE *fp1,*fp2;
           char c;
    
        if(( fp1 = fopen( "f1.txt", "r" )) == NULL)
        {
            printf(" File open error!
    " );
            return 0;
           }
           if(( fp2 = fopen( "f2.txt", "w" )) == NULL)
        {
               printf(" File open error!
    " );
               return 0;
           }
           while( !feof( fp1 ) ){
             c = fgetc( fp1 );
             fputc(c, fp2);
           }
           fclose( fp1 );
           fclose( fp2 );
           return 0;
    }

    打开多个文件

    if((fp1 = fopen(f1.dat, "r")) == NULL){
        printf("File open error!
    ");
        exit(0);
    }
    if((fp2=fopen("f2.dat", "w")) == NULL){
        printf("File open error!
    ");
           exit(0);
    }
    C语言允许同时打开多个文件
    不同的文件对应不同的文件指针
    不允许同一个文件在关闭前再次打开
  • 相关阅读:
    Educational Codeforces Round 23 D. Imbalanced Array(单调栈)
    hdu 4355 Party All the Time(三分)
    Educational Codeforces Round 21 F. Card Game(网络流之最大点权独立集)
    qscoj Round 1(div 2)
    玲珑杯 ACM Round #10
    hihoCoder #27
    Codeforces Round #396(div 2)
    高数A(下)第九章
    Mutual Training for Wannafly Union #5
    寒假集训补完
  • 原文地址:https://www.cnblogs.com/2228212230qq/p/7788957.html
Copyright © 2011-2022 走看看