【黑马程序员】C语言文件

原创 2015年11月17日 16:44:02

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


一、文件的概念及分类


1.文件是什么?

文件指存储在外部介质上数据的集合,这个数据集有一个名称,叫做文件名


2.文件的分类


1)从用户的角度看,文件可分为普通文件和设备文件两种


2)从文件编码的方式来看,文件可分为ASCII码文件和二进制文件两种


二、文件的操作步骤及原理


1.文件的操作步骤


1)引入头文件(stdio.h)

2)  定义文件指针

3)打开文件

4)读写文件

5)关闭文件


三、c语言文件指针


1.c语言文件指针

在c语言中用一个指针变量指向一个文件,这个指针称为文件指针


一般形式:

FILE *指针变量标示符;


四、文件的打开(fopen函数)


文件指针名 = fopen(文件名,使用文件方式);


五、文件关闭函数(fclose函数)


文件一旦使用完毕,应用关闭文件函数把文件关闭,以避免文件 的数据丢失等错误


fclose(文件指针)


*注意:如果文件写操作时,没有进行关闭,可能会导致文件写入失败


六、字符读写函数


1.字符写入函数fputc

字符读写函数是以字符(字节)为单位的读写函数。每次可从文件读出或想文件写入一个字符


fputc函数的功能是把一个字符写入指定的文件中。一般形式:


fputc(字符,文件指针);


2.读取文件中的字符fgetc


一般形式: fgetc(文件指针)


<span style="font-size:14px;">//
//  main.m
//  保存键盘输入的字符串到文件,并输出
//
//  Created by Brisinga on 15/11/17.
//  Copyright © 2015年 yan. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //定义一个数组来存储用户输入的字符串
        char str[100];
        //提示用户输入一个字符串
        printf("请输入一个字符串:\n");
        //接收用户输入的字符串
        gets(str);
        //定义一个文件指针
        FILE *fp = fopen("a.txt", "w+");
        if (fp!=NULL) {
            for (int i=0; i<strlen(str); i++) {
                fputc(str[i], fp);   //将字符串写入文件
            }
            printf("写入成功!\n");
        }
        rewind(fp);   //将指针放在开始位置
        printf("写入的字符串是:\n");
        //输出字符串
        char s = fgetc(fp);
        while (s!=EOF) {
            putchar(s);
            s = fgetc(fp);
        }
        printf("\n");
        fclose(fp);
    }
    return 0;
}
</span>

七、字符串读写函数:fgets和fputs


1.fgets()是一个安全的字符串接收的函数


一般的格式:

fgets(数组名,数组长度,stdin);

当输入的字符串的长度大于数组的长度,fgets会自动的把数组的最后一个元素变成\0


2.fputs()也是一个文件操作相关的函数

格式:   fputs(数组名,stdout);


*注意:1)fgets读取的时候,当文件内容读取完毕后,会给字符加上结束符\0

2)  fgets读取的时候,当遇到\n或者EOF,读取结束


<span style="font-size:14px;">//  main.m
//  保存键盘输入的字符串到文件,并输出,用fgets和fputs
//
//  Created by Brisinga on 15/11/17.
//  Copyright © 2015年 yan. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //定义一个数组用来接收用户的输入
        char str[100];
        //提示用户输入
        printf("请输入一个字符串:\n");
        //接收用户的输入
        fgets(str, sizeof(str),stdin);
        fputs(str, stdout);
        //写入文件
        FILE *fp = fopen("a.txt", "w+");
        if (fp!=NULL) {
            fputs(str, fp);
            printf("文件写入成功!\n");
        }
        //读取文件
        rewind(fp);
        char str2[100];
        fgets(str2, sizeof(str2), fp);
        fputs(str2, stdout);
        
    }
    return 0;
}
</span>

八、数据块读写函数:fread和fwrite


1.数据块读写函数


读数据块函数调用的一般形式为:


fread(buffer,size,count,fp);

写数据块函数调用的一般形式:


fwrite(buffer,size,count,fp);


buffer:是一个指针,它表示存放数据的首地址

size:表示数据块的字节数

count:表示要读写的数据块数

fp:文件指针


<span style="font-size:14px;">//
//  main.m
//  从文件中读写结构体信息
//  从键盘输入两个学生数据,写入一个文件中,再读出这两个学生的数据显示在屏幕上
//  Created by Brisinga on 15/11/17.
//  Copyright © 2015年 yan. All rights reserved.
//

#import <Foundation/Foundation.h>

//定义一个结构体
typedef struct students{
    
    char name[20];
    int  no;
    int  age;

}stu;

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //创建一个结构体数组
        stu boys[2];
        //提示用户输入学生信息
        for (int i=0; i<2; i++) {
            char ch[20];
            printf("请输入第%d个学生的姓名:\n",i+1);
            scanf("%s",ch);
            strcpy(boys[i].name, ch); //接收学生姓名
            printf("请输入第%d个学生的学号:\n",i+1);
            scanf("%d",&boys[i].no);  //接收学生学号
            printf("请输入第%d个学生的年龄:\n",i+1);
            scanf("%d",&boys[i].age);  //接收学生年龄
        }
        //创建文件指针
        FILE *fp = fopen("a.txt", "w+");
        if (fp!=NULL) {
            //写入文件
            fwrite(boys, sizeof(boys), 1, fp);
            printf("文件写入成功!\n");
        }
        rewind(fp);
        //从文件中读取信息
        stu b[2];
        fread(b, sizeof(b), 1, fp);
        for (int i=0; i<2; i++) {
            printf("学生%d:%s,%d,%d\n",i+1,b[i].name,b[i].age,b[i].no);
        }
        fclose(fp);
    }
    return 0;
}
</span>

九、格式化读写函数fscanf和fprintf


1.这两个函数的调用格式为:

fscanf(文件指针,格式字符串,输入表列);

fprintf(文件指针,格式字符串,输出表列);


<span style="font-size:14px;">//
//  main.m
//  读取和写入一个二维数组
//  使用fprintf和fscanf将一个二维数组逐行写入到文件中
//    1,2#
//    3,4#
 //   5,6#

//  Created by Brisinga on 15/11/17.
//  Copyright © 2015年 yan. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        int a[3][2] = {1,2,3,4,5,6};
        //创建一个文件指针
        FILE *fp = fopen("a.txt", "w+");
        if (fp!=NULL) {
            //写入到文件中
            for (int i=0; i<3; i++) {
                fprintf(fp,"%d,%d#\n",a[i][0],a[i][1]);
            }
            printf("写入成功!\n");
        }
        //文件指针复位
        rewind(fp);
        //读取二维数组
        int b[3][2];
        for (int i=0; i<3; i++) {
            fscanf(fp,"%d,%d#\n",&b[i][0],&b[i][1]);
        }
        //输出取出来的二维数组
        for (int i=0; i<3; i++) {
            for (int j=0; j<2; j++) {
                printf("%d ",b[i][j]);
            }
        }
        fclose(fp);  //关闭文件指针
    }
    return 0;
}
</span>

十、文件的随机读写

1.什么是随机读写

  移动文件内部的位置指针到需要读写的位置,再进行读写,这种读写称为随机读写

   实现随机读写的关键是要按要求移动位置指针,这成为文件的定位、


2.文件定位

 移动文件内部位置指针的函数主要由两个:

rewind():   rewind(文件指针);

fseek():   fseek(文件指针,位移量,起始点);


注意: 

还要说明的是fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往

往计算的位置 会出现错误。


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

黑马程序员——ios开发基础之C语言预处理命令与文件操作

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 第一讲  预处理命令

黑马程序员——ios基础---C语言:结构体、条件编译、文件操作

一、结构体: 1、安全的字符串读取和输出的函数  读入字符串的方法:  1) scanf 缺点:不能接收空格  2) gets 优点:可以接受含有空格的字符串  3) fgets(); 优点:可以帮我...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

黑马程序员——C语言——宏定义、条件编译、文件包含等

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——- 一、预处理指令 1、所有的预处理指令都是以#开头 2、预处理指令分为三种 1)、宏定义 2)、条件编译...

黑马程序员——C语言——文件读写

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1. 文件概念和分类 文件:存储在外部介质上数据的集合,这个数据集有一个名称叫做文件...

黑马程序员——c语言基础:文件管理

1.文件的基本概念和文件操作  文件:“文件”指存储在外部介质上数据的集合,这个数据集有一个名称,叫做文件名。    文件的分类:     1)从用户的角度看,文件可分为普通文件和...

黑马程序员———C语言———【枚举、typedef、宏、static和extern、文件操作】

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- ———————————————————————————————————————————————...

【黑马程序员】c语言的文件操作

---------- IOS培训、java培训、期待与您交流! ---------- 所谓“文件”是指一组相关数据的有序集合。这个数据集有一个名称,叫做文件名。实际上在前面的...

黑马程序员——C语言基础——文件读写实战

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 今天复习的是C语言中另一块比较重要的部分,文件的读写操作。
  • Elors
  • Elors
  • 2015-06-04 21:06
  • 337

【黑马程序员】C语言基础-文件管理

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、什么是文件         文件有不同的类型,在程序设计中,主要用到两种...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)