Bliner'Site Bliner'Site

高树靡阴,独木不林。


  • 首页

  • 分类 10

  • 标签 36

  • 归档 214

  • 关于我

  • 搜索

标签:C

C语言中操作文件-用二进制的方式读写文件-学习笔记-64

发表于 2018-10-25 | 分类 笔记&教程 | 评论数: 2 | 阅读次数: 119

引言

前面我们说,使用 fprintf 和 fscanf 确实很方便,也很好理解,但是频繁的进行读写,二进制和 ASCII 码转来转去不是事,太耽误时间了,那么今天我们就来学习如何读取和写入二进制数据,还能一次输入输出结构体等成组的数据哦~

二进制文件读写函数

一般形式

fread (buffer,size,count,fp);
fwrite(buffer,size,count,fp);

参数说明

  • **buffer:**是一个地址,对 fread 而言,buffer 代表着那些从文件读入的数据在内存存储区的地址。
  • **size:**要读写多少个字节数。
  • **count:**要读写多少个数据项,一个数据项的长度是 size 字节
  • **fp:**FILE 文件类型指针

我知道这里的 buffer、size 和 count 把大家绕晕了,我再来说明一下

float f[20];
fread(f,4,10,fp);
//从 fp 指向的文件中取出10个数据项,每项数据4个字节。存储到数组 f 中
阅读全文 »

C语言中操作文件-用格式化的方式读写文件-学习笔记-63

发表于 2018-10-25 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 53

引入

我们前面将了如何输出一个字符、如何输出一串字符,但是数据并不仅仅只有字符,数据的类型是十分丰富的。我们在使用 printf 和 scanf 的时候,通过%d %s %f %o来格式化不同的数据,那么磁盘文件能否也这样进行操作呢?

格式化读写函数

其实就像 gets 、puts 和 fgets、fputs一样。
格式化读写函数是从 printf 、scanf 延伸

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

fprintf 函数:

int i=3;
float f=5.3;
fprintf(fp,"%d,%6.2f",i,f);
//将 int 型的 i 和 float 型的 f 按 %d 和 %6.2f 的形式输出到 fp 指向的文件中
阅读全文 »

C语言中操作文件-向文件读写一个字符串-学习笔记-62

发表于 2018-10-24 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 72

引入

前面我们学习了如何向文件写入一个字符,以及读取一个字符串,但是这太反常识了,有没有方便读写一个字符串的方法呢?当然是有的!😎

读写字符串的函数

C 语言允许通过函数 fgets 和 fputs 一次读写一个字符串

函数名 调用形式 功能 返回值
fgets fgets(str,n,fp) 从 fp 指向的文件中,读取一个长度位 n-1 的字符串,存放到字符数组 str 中。 成功则返回str 的地址,失败则返回 NULL
fputs fputs(str,fp) 把 str 所指向的字符串写到文件指针变量 fp 中 成功为0,失败为非0

fgets 函数

一般形式

char fgets (char str , int n , FILE *fp);

作用是从文件读入一个字符串到字符数组

fgets(str, n, fp);
//读取一个文件中的字符串给字符数组
阅读全文 »

C语言中操作文件-向文件写入字符-学习笔记-61

发表于 2018-10-24 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 78

引入

前面,我们学会了如何打开一个文件,并创建一个指针指向该文件。打开之后,我们就要对文件进行读写了。

向文件读写字符

对文件进行读写一个字符,需要下面这两个函数

函数名 调用形式 功能 返回值
fgetc fgetc(fp) 从 fp 指向的文件读入一个字符 读入成功,返回所读的字符 读入失败,返回-1
fputc fputc(fp) 把字符 ch 写到文件指针变量 fp 指向的文件 输出成功,返回输出的字符 输出失败,返回-1

fgetc 中

  • f: 表示 file 即文件
  • **get:**表示 获取
  • **c:**表示 character
  • fputc 同理

例子引入

从键盘逐个输入字符串,然后用 fputc 函数写到磁盘文件中

#include <stdio.h>
#include<stdlib.h>
int main(){
    FILE *fp;
    char ch,filename[20];  //一个存文字,一个存文件目的
    printf("请输入文件位置:\n");
    scanf("%s",filename);  //输入文件名
    if((fp=fopen(filename,'w'))==NULL){
      // 如果获取不到指针,就证明打开文件失败
        printf("错误!文件无法读入!");
        exit(0);  //结束该程序
    }
    ch=getchar();  //因为上面输入文件名的时候,输入了一个回车,先存在这里,否则会输入到磁盘里
    printf("请输入一个准备存储到磁盘的字符串(#号结尾):\n");
    ch=getchar();  //覆盖上面的回车,获取输入的第一个字符
    while(ch!='#'){ 
      //如果第一个字符不是 # 号,就开始循环
        fputc(ch,fp);    //因为上面已经输入了一个了,所以先存储
        putchar(ch);  //然后把输入的内容输出到终端
        ch=getchar();  //再从键盘获取新的输入的内容
    }
    fclose(fp);  //用完文件一定要关闭文件,否则写入会失败
    return 0;
}
阅读全文 »

C语言中操作文件-打开和关闭数据文件-学习笔记-60

发表于 2018-10-23 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 52

引入

我们讲了这么久的文件,知道了文件名、内存缓冲区、缓冲区中的文件信息区以及定义一个 FILE 结构体变量和指针。今天我们就来尝试打开和关闭一个文件。

fopen 函数打开文件

ANSI C 规定了用标准输入输出函数 fopen 来实现打开文件
一般形式

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

例如:

fopen("a1","r");
//其中 a1 就是文件名,r 就是使用文件方式

**a1:**是要打开的文件名,也可以是字符数组的首地址
**r:**使用文件方式(r 表示 read 读入)

fopen 函数的返回值是指向 a1 文件的指针,也就是 a1 在内存中的文件信息区的起始地址。所以,我们经常将 fopen 函数的返回值给一个指向文件的指针变量。

FILE *fp;  //定一个指向文件的指针变量 fp
fp=fopen("a1","r");  //将 fp 赋值,值为a1的文件信息区起始地址
阅读全文 »

C语言中操作文件-文件类型指针-学习笔记-59

发表于 2018-10-23 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 23

引入

在上节讲的缓冲文件系统中,最关键的概念就是文件类型指针,简称为:文件指针。我们知道,要让程序操作一个文件,都需要将其加载到内存中,但是加载到内存之前,需要现经过缓冲区。所以,每个文件被使用时,都在内存中开辟一个相应的文件信息区,用来存放文件的有关信息。

有关信息包括:文件名、文件状态及文件当前位置等信息

这些信息都是保存在一个结构体变量中的,该结构体类型由系统声明,取名为FILE。

存放文件信息的 FILE

在不同的 C 编译环境中 FILE 的内容可能不完全相同,我们来举个例子,FLIE 的结构体可能是这样的,它包含在stdio.h中:

typedef struct {
short level;   // 缓冲区“满”或“空”的程度
unsigned flags;  //文件状态标志
char fd;   //文件描述符
unsigned char hold;   //如缓冲区无内容不读取字符
short bsize;   //缓冲区的大小
unsigned char * buffer;   //数据缓冲区的位置
unsigned char* curp;   //指针当前的指向
unsigned is temp;   //临时文件指示器
short token;   //用于有效性检查
}FILE;
阅读全文 »

C语言中操作文件-文件分类和文件缓冲区-学习笔记-58

发表于 2018-10-22 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 38

文件的分类

根据数据的组织形式不同,数据文件可以分为:

  • ASCII 文件
  • 二进制文件

数据在内存中是以二进制形式存储的。
如果不加转换,输出到外存,就是二进制文件,
可以认为它是存储在内存的数据的影响,也称之为映像文件。

如果要求在外存上以 ASCII 码的形式存储,需要在存储前将二进制文件转换成 ASCII 文件,又称文本文件,每一个字节存放一个字符的 ASKII 码。

数据在磁盘入怎样存储?

字符:一律以 ASCII 码形式存储。
数值:即可以以 ASCII 码形式存储,也可以以二进制存储。

存储整数 10000
ASKII 码:5个字节(每个字符占 1 字节)
二进制:4个字节

阅读全文 »

C语言中操作文件-文件和文件名-学习笔记-57

发表于 2018-10-22 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 74

引入

只要是会使用计算机的人,对文件一定都不陌生,word 文件、PPT 文件、邮件的附件、照片、视频都是文件。要在程序中操作这些文件,就需要对文件的基础进行了解。

文件是什么

文件有不同的类型,在程序设计中,主要用到两种文件

  • 程序文件: 包括源程序.c文件、目标文件.obj文件以及可执行文件.exe 文件等。这种文件的内容是程序代码。
  • 数据文件: 这种文件的内容不是程序,是供程序运行时读写的数据。包括在程序运行过程中输出到磁盘的数据、供程序读入的数据。如成绩数据或者货物交易记录等。

本章我们主要讨论的是第二种,数据文件。

阅读全文 »

C语言中建立数据类型-使用 typedef 声明新类型名-学习笔记-56

发表于 2018-10-21 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 91

引入

我们知道,数据的类型可以是系统自带的int float char double等类型,也可以是我们自己声明的结构体、共用体、枚举类型等。其实,我们还可以用 typedef 指定新的类型名代替已有的类型名。

替换原有类型

我们用一个新的类型名,替换原有的类型名

typedef int integer;
//指定使用 integer 为类型名,代替 int 使用
typedef float Real;
//是定使用 Real 为类型名,代替 faloat 使用

声明之后,那么下面的内容等价:

typedef int Bliner;
Bliner a,b; 
//上面的内容等价于
int a,b;

方便在自己的程序中使用和方便其他人查看和维护。

阅读全文 »

C语言中建立数据类型-枚举类型-学习笔记-55

发表于 2018-10-21 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 60

引入

如果一个变量,我们只希望它的值在我们指定的值得范围内,例如week,我们只希望值在周一至周日之间,而不是星期八等特殊情况,我们就需要枚举类型。

枚举

如果一个变量,只有可能是几种类型的值,就可以定义为枚举类型。枚举就是把可能的值都列举出来,变量的值,只能在列举的这个值的范围内。
一般形式

enum 枚举类型名 {枚举元素列表}

使用枚举

我们来定义一个 weekday 变量类型

enum Weekday {sun , mon , tue , web , tuhe , fri , sat};
// 声明了一个枚举类型 Weekday , 枚举元素是sun~sat
enum Weekday workday;
// 定义了一个枚举类型变量 workday
workday = mon;  // 合法,mon 是枚举元素之一
workday =sat;  // 合法,sta 是枚举元素之一
workday = second;   //非法,second不是枚举元素之一
阅读全文 »
上一页 1 ... 7 8 9 ... 14 下一页
Bliner

Bliner

214 日志 10 分类 36 标签
RSS

推荐阅读

关于GTD中项目“复盘”的一想法
© 2008 - 2026 Bliner
鲁ICP备13021673号