当前位置: 首页 > news >正文

C语言stdio.h指南:从printf到文件操作的全方位解析

前面我们说到了可变参数函数,这一节的讲解可变参数函数在C标准库中的应用。在C语言中,使用到printf函数来进行数据输出就是比较常见的选择。其实现在C标准库中,而调用printf函数,就需要引入头文件。

作为C语言中的标准输入输出库,定义一系列的输入输出函数,负责处理程序与外部世界的所有通信;支持通过printf、scanf、fprintf、fscanf等函数,用于从命令行、文件等输入输出数据信息,并提供格式化功能。

标准库stdio.h声明的函数和类型

标准库作为C语言标准输入输出库,包含时会引入三个标准输入流。

处理这些流,标准库也提供一系列函数进行处理,下面开始具体介绍说明。

格式化输入输出

对于格式化输入输出,大家应该都不陌生,如printf、scanf、sprintf、sscanf等,它们允许按照指定的格式(如 %d, %f, %s 等)来输入输出数据,进行格式化操作。另外它们都是变长参数函数,这意味着可以根据需要输入或输出不同数量的参数。关于这些函数的详细内容和实现方法,在之前都有所讲解,这里只说下功能和应用。

函数名称

功能

printf

格式化输出函数,将格式化的数据输出到标准输出流

scanf

输入函数,从标准输入流中读取数据,并格式化输出

sprintf

格式化输出函数,将格式化的数据输出到字符串中

sscanf

输入函数,从字符串中读取数据,并格式化输出

这里列举些格式化输出的例子。

#include int main(int argc, char *argv[]) { int a = 10; float b = 3.14; char str[100] = {0}; int c; float d; // 格式化输出 printf("a = %d, b = %f\n", a, b); // 格式化输出到字符串 sprintf(str, "a = %d, b = %f", a, b); printf("%s\n", str); // 从字符串中读取数据 sscanf(str, "a = %d, b = %f", &c, &d); printf("c = %d, d = %f\n", c, d); return 0; }

具体执行结果如下所示。

可以看到,printf实现输出功能,sprintf实现格式化输出到字符串,sscanf实现从字符串中读取数据;这是C语言进行字符串处理的核心函数之一,用于格式化和解析字符串,在命令行交互、网络应用中都有广泛的应用。

字符、字符串输入输出

字符、字符串输入输出,则是更底层的接口函数;可以实现单个或多个字符的输入输出,包含getchar()、putchar()、gets()、puts()等,具体功能如下所示。

函数名称

功能

getchar

从标准输入流中读取一个字符

putchar

将一个字符输出到标准输出流

gets

从标准输入流中读取一个字符串(已被废弃,不推荐使用)

puts

将一个字符串输出到标准输出流

关于这部分接口和实践,已经详细介绍过,可以参考之前的文章,具体如下所示。

文件操作接口

对于stdio.h来说,除了上述输入输出接口,更重要的是提供了一系列文件操作接口,用于实现文件的读写操作。

关于读写接口,包含接口比较多,这里介绍其中的一些常用函数。

函数名称

功能

fopen

打开文件,返回文件指针

fclose

关闭文件

fread

从文件中读取数据

fwrite

向文件中写入数据

fprintf

格式化输出函数,将格式化的数据输出到文件

fscanf

输入函数,从文件中读取数据,并格式化输出

fseek

文件指针移动到指定位置

ftell

获取文件指针位置

关于文件操作接口,例程如下所示。

#include int main(int argc, char *argv[]) { FILE *fp; fp = fopen("test.txt", "rw"); if (fp == NULL) { printf("open file error\n"); return -1; } // 格式化输出到文件 fprintf(fp, "hello world\n"); // 将文件指针移动到文件开头 fseek(fp, 0, SEEK_SET); // 从文件中读取数据 char buf[100] = {0}; fread(buf, 1, sizeof(buf), fp); printf("%s", buf); fclose(fp); return 0; }

这里面关于fopen有个知识点,支持通过r、w、a来实现对于文件的不同访问控制,具体说明如下。

开发者在使用时根据需求选择合适的访问方式。

说明总结

对于stdio.h标准库来说,除了上述接口说明,还有重要的知识点,就是缓冲机制。C语言为了提高输出效率,并不会将每个字符都直接输出显示,而是内部使用缓冲区来暂存数据,待缓冲区满或遇到换行符时才会输出,这就需要你在使用时注意;如果在应用中调用printf等函数发现数据没有正常输出,可以考虑是否没有换行符或者可以通过fflush(stdout)函数强制刷新。

stdio.h标准库提供了一系列函数进行格式化输入输出和文件操作,可以是大部分C应用程序的出入口,掌握这些函数的使用方法,可以实现对输入输出的灵活控制,同时也可以进行文件的读写操作,具有较高的实用性和重要性。

http://www.jsqmd.com/news/637501/

相关文章:

  • 别再复制粘贴了!手把手教你为STM32F103ZE手动移植FreeRTOS v202212.01(附完整源码包)
  • 专知智库白皮书(一):什么是余行税?企业隐形生存税的定义与本质
  • 新手小白学习人工智能,推荐哪些入门书籍和课程?适合零基础的有哪些?|2024新手必看
  • explainerdashboard核心组件详解:从SHAP值到特征重要性分析
  • 深入解析AX3000 PLC中HSC_Counter高速计数指令的配置与优化
  • 基于微信小程序实现移动学习平台管理系统【附项目源码+论文说明】计算机毕业设计
  • GoCelery扩展开发:如何自定义Broker和Backend
  • TDC终极指南:3步掌握药物研发AI神器,轻松预测分子特性
  • 50ms消息响应革命:Rocket.Chat边缘计算部署实战指南
  • 专知智库白皮书(二):余行税的三大表现与流程税对比
  • ABAP - 动态生成邮件表格并自动发送的实战代码
  • 实测可行|OpenClaw windows部署教程 路径报错快速修复
  • 基于微信小程序实现个人行政复议在线预约系统【附项目源码+论文说明】计算机毕业设计
  • 告别CANoe!用这个QT开发的DBC/Excel互转工具,5分钟搞定报文数据整理
  • ttkbootstrap自定义主题创建教程:打造专属UI设计系统
  • 2026奇点大会AIAgent自动驾驶核心白皮书首发(仅限前500名技术决策者获取)
  • 微服务架构:如何将 Express ES6 API 拆分为可扩展的微服务
  • douyin-ios-objectc性能优化:如何实现流畅的视频列表滚动体验
  • 微信小程序调用Pixel Couplet Gen:用户行为埋点与A/B测试方案
  • 沁恒蓝牙芯片CH57x系列开发实战:从机模式深度解析
  • 知网AI率高怎么降?嘎嘎降AI使用教程:3步降到5%
  • Rocket.Chat终极安全指南:区块链技术如何重塑企业通信安全
  • F-Droid Client高级技巧:蓝牙共享、IPFS集成和仓库管理的终极教程
  • 3个必知技巧:快速上手AI-Render插件,轻松实现Blender中的AI艺术创作
  • Docker Desktop vs Docker Toolbox:2024年开发者该如何选择?
  • MiniCPM-V-2_6产品设计反馈:用户晒图识别→痛点挖掘→改进建议生成
  • Freedom DDD 框架事务处理完全指南:保证数据一致性的最佳实践
  • LibMTL核心原理详解:多任务学习中梯度冲突的终极解决方案
  • GridDB SQL功能完全指南:在分布式环境中执行复杂查询
  • 专知智库白皮书(三):降低余行税的系统化方法——余行补位