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

C 语言标准输入输出库:`stdio.h` 的使用详解

1. 概述

在 C 语言中,stdio.h(Standard Input Output Header)是一个标准库头文件,主要用于提供输入与输出功能。几乎所有的 C 程序都会用到它,因为它定义了用于读取、写入、格式化、文件操作等常用函数。

要在程序中使用它,需要在源文件顶部引入:

#include <stdio.h>

引入后,就可以使用 stdio.h 中定义的函数、类型和宏。


2. 常见功能分类

stdio.h 的功能可以大致分为五大类:

  1. 标准输入/输出(终端 I/O)
  2. 格式化输入/输出printf / scanf 等)
  3. 字符与字符串输入/输出
  4. 文件输入/输出
  5. 错误处理宏与常量

3. 标准输入输出流

stdio.h 中定义了三个标准数据流:

名称类型用途
stdinFILE*标准输入流(默认键盘输入)
stdoutFILE*标准输出流(默认控制台输出)
stderrFILE*标准错误流(默认错误输出)

这些可以直接用于 printffprintfscanffscanf 等函数操作。


4. 常用函数详解

4.1 格式化输出函数

printf - 输出格式化到标准输出
#include <stdio.h>int main() {int a = 10;float b = 3.14;printf("a = %d, b = %.2f\n", a, b);return 0;
}
  • %d:整型
  • %f:浮点型
  • %s:字符串
  • %c:字符
  • %.2f:保留两位小数
fprintf - 输出到文件流
fprintf(stdout, "Hello %s\n", "World");
fprintf(stderr, "Error: invalid input\n");
sprintf / snprintf - 输出到字符串
char buf[50];
sprintf(buf, "Sum = %d", 5 + 3);
  • snprintf 带长度限制,安全性更好。

4.2 格式化输入函数

scanf - 从标准输入读取格式化数据
int x;
scanf("%d", &x);
fscanf - 从文件流读取格式化数据
FILE *fp = fopen("data.txt", "r");
int n;
fscanf(fp, "%d", &n);
sscanf - 从字符串读取数据
char str[] = "100 3.14";
int a; float f;
sscanf(str, "%d %f", &a, &f);

4.3 字符输入输出函数

getchar / putchar
char c = getchar(); // 从 stdin 读取一个字符
putchar(c);         // 输出到 stdout
gets(已废弃)/ fgets
char buf[100];
fgets(buf, sizeof(buf), stdin); // 安全读取字符串
puts
puts("Hello World"); // 自动换行

4.4 文件输入输出函数

使用文件 I/O 需要理解 FILE 结构体,FILE* 是指向文件对象的指针。

打开和关闭文件
FILE *fp = fopen("test.txt", "w"); // w: 写模式
if (!fp) {perror("File open error");return 1;
}
fclose(fp);

常见文件打开模式:

模式说明
"r"读模式(文件必须存在)
"w"写模式(清空原文件)
"a"追加模式
"r+"读写模式
"w+"清空写读模式
"a+"追加读写模式
二进制模式
  • "rb", "wb", "ab"
文件读取函数
char buf[100];
fgets(buf, sizeof(buf), fp);    // 读取一行
fread(buf, 1, 50, fp);          // 按字节读取
文件写入函数
fprintf(fp, "Hello File\n");
fwrite(buf, 1, strlen(buf), fp);
文件定位
fseek(fp, 0, SEEK_SET); // 移动到文件开头
ftell(fp);              // 获取当前偏移量
rewind(fp);             // 回到文件开头

4.5 错误处理

perror / feof / ferror
FILE *fp = fopen("nofile.txt", "r");
if (!fp) {perror("Open file error"); // 输出描述性错误
}

5. 常用宏与类型

stdio.h 中定义了:

  • EOF:通常是 -1,表示文件结束或输入错误
  • NULL:空指针常量
  • size_t:无符号整数类型(用于数组、文件大小)

6. 注意事项与最佳实践

  1. 避免使用不安全函数
    • 不要使用 gets,改用 fgets
    • sprintf 改用 snprintf
  2. 检查文件操作返回值
    • 确保 fopen 成功后再使用文件
  3. 使用缓冲机制
    • setbufsetvbuf 可以设置自定义缓冲,优化性能
  4. 正确关闭文件
    • 使用 fclose 释放资源,防止内存泄漏
  5. 格式化时谨慎类型匹配
    • printf / scanf 格式化符应与变量类型严格匹配

7. 小结

stdio.h 是 C 语言中最基础、最常用的库之一,掌握它不仅能提高代码的输入输出效率,还能打下坚实的文件操作基础。在编写程序时,熟练使用 printfscanffgetsfprintf 等函数,以及安全地进行文件读写,是每个 C 程序员的必备技能。


文章转载自:

http://gFecXshr.rbzht.cn
http://YfPSmcUy.rbzht.cn
http://5cSdxSn4.rbzht.cn
http://zPXULXcD.rbzht.cn
http://RodUcHwG.rbzht.cn
http://3ybpCNXi.rbzht.cn
http://KsG11fpr.rbzht.cn
http://Yqv7yHzD.rbzht.cn
http://NaeJ0a1Y.rbzht.cn
http://D5sMMKdD.rbzht.cn
http://EinOTC68.rbzht.cn
http://AHJc6ArD.rbzht.cn
http://aYrM4q3B.rbzht.cn
http://t15DR01E.rbzht.cn
http://KFogWGzU.rbzht.cn
http://RZE79Iak.rbzht.cn
http://lfoQumcn.rbzht.cn
http://3tkWEL4B.rbzht.cn
http://3okGOZxp.rbzht.cn
http://KVboZ2va.rbzht.cn
http://pnPrEVvd.rbzht.cn
http://0JiaDRwB.rbzht.cn
http://kXsoBgwz.rbzht.cn
http://3OzdKadX.rbzht.cn
http://2MC3xEWT.rbzht.cn
http://AaskRkDJ.rbzht.cn
http://S3mPGQRz.rbzht.cn
http://pE3ZbEgS.rbzht.cn
http://uZxpqTmu.rbzht.cn
http://gPHn7k9N.rbzht.cn
http://www.dtcms.com/a/365949.html

相关文章:

  • 【WPS】WPSPPT 快速抠背景
  • Python学习笔记--使用Django修改和删除数据
  • 52.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--解决客户端调用接口404问题
  • 硬件:51单片机的按键、中断、定时器、PWM及蜂鸣器
  • Spring Boot HTTP状态码详解
  • 性能测试-jmeter8-脚本录制
  • 揭秘23种设计模式的艺术与技巧
  • < 自用文 主机 USC 记录:> 发现正在被攻击 后的自救
  • Protocol Buffers:数据世界的秘语之书,手把手教学环境搭建
  • mysql高级进阶(存储过程)
  • 认识HTML
  • CDN的工作原理是什么?为什么要用高防 CDN?
  • 数据结构:双向链表
  • 分割回文串手绘图
  • 电脑城老板不会告诉你的装机秘籍:建造者模式让你的代码高配起飞!
  • @Autowired原理(三)
  • 【Qt中信号槽连接connect有接收者和无接收者的区别】
  • LeetCode 20.有效的符号算法解析及栈的相关知识
  • FTL文件格式的原理与应用(AI)
  • 【工具变量】上市公司绿色供应链管理示范企业DID数据(2010-2024年)
  • AUTOSAR进阶图解==>AUTOSAR_TPS_ARXMLSerializationRules
  • Linux学习-硬件
  • 2025年IT行业入门级证书选择与分析
  • 从竞态到原子:pread/pwrite 如何重塑高效文件 I/O?
  • 深入浅出:YOLOv8性能评估指标与电科金仓2025AI新成果
  • SuperMap GIS基础产品FAQ集锦(20250819)
  • C++----模板特化以及模板声明与定义分离问题
  • 2025 大学生必考 IT 行业证书
  • BigemapPro中的坐标定位于与拾取
  • NuttX编译流程与config.h生成解析