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!\n");
           exit(0);
    }
    fprintf( fp, "%s", "Hello World! " );            /* 写文件 */    

        if( fclose( fp ) ){                         /* 关闭文件 */
        printf( "Can not close the file!\n" );
        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!\n");
           exit(0);
    }

        while( !feof(fp) ){
           fscanf(fp, "%ld%s%d", &num, stname, &score);
              printf("%ld    %s %d\n", num, stname, score);  
    };

    if( fclose(fp) ){                        /* 关闭文件  */
            printf( "Can not close the file!\n" );
            exit(0);
    }
}
if((fp = fopen("f.txt", "r")) == NULL){
    printf("File open error!\n");
    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!\n" );
    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!\n" );
        return 0;
       }
       if(( fp2 = fopen( "f2.txt", "w" )) == NULL)
    {
           printf(" File open error!\n" );
           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!\n");
    exit(0);
}
if((fp2=fopen("f2.dat", "w")) == NULL){
    printf("File open error!\n");
       exit(0);
}
C语言允许同时打开多个文件
不同的文件对应不同的文件指针
不允许同一个文件在关闭前再次打开

 

posted @ 2017-11-05 21:46  不负、  阅读(14406)  评论(0编辑  收藏  举报