C语言各个读写操作的区别是什么?

2024-06-02 01:36
文章标签 语言 区别 读写操作

本文主要是介绍C语言各个读写操作的区别是什么?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、问题

        在C语⾔中,打开⼀个⽂件,对这个⽂件的操作包括:读出数据、写⼊数据、⽂件定位和出错检测⼏种。主要的操作是对⽂件的读写操作,读写操作有很多种,那么多种读写操作存在什么区别呢?

二、解答

        ⽂件的读写操作有 fputc( ) 函数和 fgetc( ) 函数、fread( ) 函数和 fwrite( ) 函数、fprintf( ) 函数 和 fscanf( ) 函数,还有很多其他的读写函数,下⾯对这⼏种读写操作分别介绍:

1、字符读写函数 fgetc( ) 和 fputc( )

        字符读写函数是以字符为单位的读写函数。每次可从⽂件读出或向⽂件写⼊⼀个字符。

(1) fgetc( ) 函数的作⽤是从指定的⽂件中读⼀个字符

函数调⽤的形式为:

c=fgetc(fp);

        表示从打开的⽂件f中读取⼀个字符并赋给c。

对于 fgete( ) 函数的使⽤需要注意如下⼏点:

  • 在fgete( ) 函数调⽤中,读取的⽂件必须是以读或读写⽅式打开的。
  • 读取字符的结果可以不向字符变量赋值,但是读出的字符不能保存。

(2) fputc( ) 函数的作⽤是把⼀个字符写⼊指定的⽂件中

函数调⽤的形式为:

fputc(c,fp);

        其中,c 为要输出的字符,可以是⼀个字符常量,也可以是字符变量;fp 是⽂件指针变量。

        这个函数表示将字符(c的值)输出到 fp 所指的⽂件中去。此函数的返回值就是输出的字符,如果输出失败,则返回⼀个 EOF(-1),EOF 是在 stdio.h 头⽂件中宏定义的常量,值为-1。

使⽤ fputc( ) 函数需要注意如下两点:

  • 被写⼊的⽂件可以⽤写、读写、追加⽅式打开。
  • 每写⼊⼀个字符,⽂件内部位置指针向后移动⼀个字节。

2、读写数据块的函数 fread( ) 和 fwrite( )

        读写数据块的函数 fread( ) 和 fwrite( ) 的⼀般调⽤形式为:

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

        其中,参数 buffer 表示⼀个指针,是读⼊数据的存放地址或者输出数据的地址;参数 size 表⽰要读写的字节数:参数 count 表示要进⾏读写多少个 size 字节的数据;参数 fp 是⽂件型指针。

例如:

fread(p,4,2,fp);

        此例表示从 fp 所指的⽂件中,每次读 4 个字节(⼀个实数)送⼊实数组 fa 中,连续读2次,即读 2 个实数到 fa 中。

        使⽤读写数据块的函数 fread( ) 和 fwrite( ) 时需要注意,它们⼀般⽤于⼆进制⽂件的输⼊与输出,因为它们是按照数据块的长度来处理输⼊与输出的,在字符发⽣转换时容易出现与设想不同的情况。

3、格式化读写函数 fscanf( ) 和 fprintf( )

        这两个函数与输⼊输出函数 scanf( ) 和 printf( ) 很相似,但是两者的区别是 fscanf( ) 函数和 fprintf( ) 函数是⽤于读写磁盘⽂件中的数据,⽽不是读写终端数据。它们的⼀般调⽤形式为:

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

例如:

fscanf(p,"%d,%f",&a,&b);

        如果磁盘⽂件上存有 10,6.81,则此函数表示将 fp 所指的磁盘⽂件中的整数 10 送给变量 a ,将实数 6.81送给变量 b 。

int a=6;
float b=4.56;
fprintf(fp,"%d,%5.3f",a,b);

        上例表示向 fp 所指的磁盘⽂件中写⼊⼀个整型数字 6 和⼀个浮点型数字 4.56 。在磁盘上会显示为:

6, 4.560

        在使⽤此函数时,由于在输⼊时要将 ASCII 码转换为⼆进制,在输出时又要将⼆进制形式转换为字符,花费在转换上的时间⽐较多。因此,在内存与磁盘频繁交换数据的情况下,尽量不要使⽤此函数。

三、总结

        在C语⾔中还存在很多其他的读写函数,例如,读写字符串的函数 fets( ) 和 fputs( ) 等, 因为不常⽤到所以不做过多介绍。在上述介绍的读写函数中,要注意区分它们的⽤法,以及打开⽂件的形式。

这篇关于C语言各个读写操作的区别是什么?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1022674

相关文章

分辨率三兄弟LPI、DPI 和 PPI有什么区别? 搞清分辨率的那些事儿

《分辨率三兄弟LPI、DPI和PPI有什么区别?搞清分辨率的那些事儿》分辨率这个东西,真的是让人又爱又恨,为了搞清楚它,我可是翻阅了不少资料,最后发现“小7的背包”的解释最让我茅塞顿开,于是,我... 在谈到分辨率时,我们经常会遇到三个相似的缩写:PPI、DPI 和 LPI。虽然它们看起来差不多,但实际应用

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Spring中@RestController和@Controller的使用及区别

《Spring中@RestController和@Controller的使用及区别》:本文主要介绍Spring中@RestController和@Controller的使用及区别,具有很好的参考价... 目录Spring中@RestController和@Controller使用及区别1. 基本定义2. 使