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

[C语言日寄] <stdio.h> 头文件功能介绍

在C语言的世界里,<stdio.h> 是一个极其重要的头文件,它提供了标准输入输出功能,是C语言程序与用户交互的核心工具。今天,我们就来深入探讨 <stdio.h> 的功能、使用注意事项以及它的拓展应用。

功能介绍

<stdio.h> 是C语言标准库中的一个核心头文件,它定义了一系列用于输入输出操作的函数、宏和数据类型。这些功能使得程序能够与外部设备(如键盘、显示器、文件等)进行交互。

标准输入输出函数

<stdio.h> 提供了多种用于标准输入输出的函数,这些函数是C语言程序与用户交互的基础。

1. printfscanf

printfscanf 是最常用的输入输出函数。printf 用于格式化输出,它可以根据指定的格式将数据输出到标准输出设备(通常是屏幕)。scanf 用于格式化输入,它可以从标准输入设备(通常是键盘)读取数据,并将其存储到变量中。

#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);printf("你输入的整数是:%d\n", num);return 0;
}
2. putsgets

putsgets 是用于字符串输入输出的函数。puts 用于输出字符串,它会自动在字符串末尾添加换行符。gets 用于从标准输入读取字符串,但它已经被弃用,因为它存在缓冲区溢出的风险。取而代之的是 fgets,它允许指定缓冲区大小,从而避免溢出。

#include <stdio.h>int main() {char str[100];printf("请输入一个字符串:");fgets(str, sizeof(str), stdin); // 安全的字符串输入printf("你输入的字符串是:%s", str);return 0;
}
3. fprintffscanf

fprintffscanf 是文件输入输出函数的扩展版本。它们与 printfscanf 类似,但可以指定输出或输入的目标文件。这使得程序能够从文件读取数据或将数据写入文件。

#include <stdio.h>int main() {FILE *file = fopen("example.txt", "w");if (file) {fprintf(file, "Hello, World!\n");fclose(file);}file = fopen("example.txt", "r");if (file) {char buffer[100];fscanf(file, "%s", buffer);printf("文件内容:%s\n", buffer);fclose(file);}return 0;
}

文件操作函数

<stdio.h> 提供了丰富的文件操作功能,这些功能使得程序能够对文件进行读写、打开、关闭等操作。

1. fopenfclose

fopen 用于打开一个文件,它需要指定文件名和打开模式(如读模式 "r"、写模式 "w"、追加模式 "a" 等)。fclose 用于关闭文件,释放与文件相关的资源。

#include <stdio.h>int main() {FILE *file = fopen("example.txt", "w");if (file) {fprintf(file, "Hello, World!\n");fclose(file);}return 0;
}
2. freadfwrite

freadfwrite 用于从文件中读取或向文件中写入数据块。它们允许指定读取或写入的数据大小和数量,适合处理二进制文件。

#include <stdio.h>int main() {FILE *file = fopen("example.bin", "wb");if (file) {int data = 12345;fwrite(&data, sizeof(data), 1, file);fclose(file);}file = fopen("example.bin", "rb");if (file) {int data;fread(&data, sizeof(data), 1, file);printf("文件中的数据:%d\n", data);fclose(file);}return 0;
}

格式化输入输出函数

<stdio.h> 提供了多种格式化输入输出函数,这些函数使得程序能够以灵活的方式处理输入输出。

1. sprintfsscanf

sprintfsscanf 是字符串格式化输入输出函数。sprintf 将格式化的数据写入字符串,而 sscanf 从字符串中读取格式化的数据。

#include <stdio.h>int main() {char buffer[100];int num = 123;sprintf(buffer, "数字:%d", num);printf("格式化后的字符串:%s\n", buffer);sscanf(buffer, "数字:%d", &num);printf("从字符串中读取的数字:%d\n", num);return 0;
}

其他功能

<stdio.h> 还提供了一些其他功能,如清除输入缓冲区、设置文件位置指针等。

1. fflush

fflush 用于清除输出缓冲区,将缓冲区中的数据写入目标设备。它通常用于确保数据被及时写入文件或屏幕。

#include <stdio.h>int main() {printf("Hello, World!");fflush(stdout); // 确保输出被立即写入return 0;
}
2. fseekftell

fseekftell 用于设置和获取文件位置指针。fseek 可以将文件位置指针移动到指定位置,而 ftell 返回当前文件位置指针的位置。

#include <stdio.h>int main() {FILE *file = fopen("example.txt", "r");if (file) {fseek(file, 0, SEEK_END); // 移动到文件末尾long fileSize = ftell(file); // 获取文件大小printf("文件大小:%ld 字节\n", fileSize);fclose(file);}return 0;
}

注意事项

虽然 <stdio.h> 提供了强大的输入输出功能,但在使用过程中需要注意一些问题,以避免潜在的错误和安全隐患。

1. 输入缓冲区溢出

gets 函数已经被弃用,因为它存在缓冲区溢出的风险。取而代之的是 fgets,它允许指定缓冲区大小,从而避免溢出。

char buffer[100];
fgets(buffer, sizeof(buffer), stdin); // 安全的字符串输入

2. 文件打开失败的处理

在使用 fopen 打开文件时,需要检查文件是否成功打开。如果文件打开失败,fopen 会返回 NULL,此时需要进行错误处理。

FILE *file = fopen("example.txt", "r");
if (!file) {perror("文件打开失败");return 1;
}

3. 文件关闭的必要性

在完成文件操作后,必须调用 fclose 关闭文件。如果文件没有被正确关闭,可能会导致数据丢失或文件损坏。

fclose(file);

4. 格式化字符串的安全性

在使用 printfscanf 等格式化函数时,需要确保格式化字符串与变量类型匹配。不匹配的格式化字符串可能导致未定义行为。

int num = 123;
printf("数字:%d\n", num); // 正确的格式化字符串

5. 文件位置指针的使用

在使用 fseekftell 时,需要注意文件位置指针的移动方式。SEEK_SET 表示从文件开头开始计算,SEEK_CUR 表示从当前位置开始计算,SEEK_END 表示从文件末尾开始计算。

fseek(file, 0, SEEK_SET); // 移动到文件开头

拓展应用

<stdio.h> 的功能不仅限于基本的输入输出操作,它还可以用于实现一些高级功能,如日志记录、文件加密、数据序列化等。

日志记录是程序开发中常见的需求,<stdio.h> 提供了实现日志记录的基础功能。通过将日志信息写入文件,可以方便地记录程序的运行状态。

#include <stdio.h>
#include <time.h>void log_message(const char *message) {FILE *logFile = fopen("log.txt", "a");if (logFile) {time_t now =

相关文章:

[C语言日寄] <stdio.h> 头文件功能介绍

在C语言的世界里&#xff0c;<stdio.h> 是一个极其重要的头文件&#xff0c;它提供了标准输入输出功能&#xff0c;是C语言程序与用户交互的核心工具。今天&#xff0c;我们就来深入探讨 <stdio.h> 的功能、使用注意事项以及它的拓展应用。 功能介绍 <stdio.h…...

一文读懂 Faiss:开启高维向量高效检索的大门

一、引言 在大数据与人工智能蓬勃发展的当下&#xff0c;高维向量数据如潮水般涌现。无论是图像、音频、文本&#xff0c;还是生物信息领域&#xff0c;都离不开高维向量来精准刻画数据特征。然而&#xff0c;在海量的高维向量数据中进行快速、准确的相似性搜索&#xff0c;却…...

【二叉搜索树】

二叉搜索树 一、认识二叉搜索树二、二叉搜索树实现2.1插入2.2查找2.3删除 总结 一、认识二叉搜索树 二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称 BST&#xff09;是一种特殊的二叉树&#xff0c;它具有以下特征&#xff1a; 若它的左子树不为空&#xff0c;则…...

R语言统计分析——ggplot2绘图5——拟合光滑曲线

参考资料&#xff1a;R语言实战【第2版】 ggplot2包可以通过计算统计函数并添加到图形中。例如&#xff1a;分级数据、计算密度、轮廓和分位数等。这里我们重点将添加平滑曲线&#xff08;线性、非线性和非参数&#xff09;到散点图中。 我们可以使用geom_smooth()函数来添加一…...

疯狂拆单词01

疯狂拆单词01 有些单词是可以拆的&#xff0c;不&#xff0c;是可以反复拆的&#xff0c;拆着拆着&#xff0c;你的词汇量&#xff0c;就能快速飙升&#xff1a; 【】disappointment disappointment n.失望&#xff0c;沮丧&#xff0c;扫兴 &#xff08;ment-名缀&#xff0…...

高效学习方法分享

高效学习方法分享 引言 在信息高速发展的今天&#xff0c;学习已经成为每个人不可或缺的一部分。你是否曾感到学习的疲惫&#xff0c;信息的爆炸让你无从下手&#xff1f;今天&#xff0c;我们将探讨几种高效的学习方法&#xff0c;帮助你从中找到适合自己的学习之道。关于学…...

01.双Android容器解决方案

目录 写在前面 一&#xff0c;容器 1.1 容器的原理 1.1.1 Namespace 1.1.2 Cgroups&#xff08;Control Groups&#xff09; 1.1.3 联合文件系统&#xff08;Union File System&#xff09; 1.2 容器的应用 1.2.1 微服务架构 1.2.2 持续集成和持续部署&#xff08;CI/…...

一文大白话讲清楚webpack进阶——9——ModuleFederation实战

文章目录 一文大白话讲清楚webpack进阶——9——ModuleFederation实战1. 啥是ModuleFederation2. 创建容器应用3. 创建远程应用4. 启动远程应用5. 使用远程应用的组件 一文大白话讲清楚webpack进阶——9——ModuleFederation实战 1. 啥是ModuleFederation 先看这篇文章&#…...

Mysql意向锁

这里写目录标题 前置问题概念作用兼容互斥性总结 前置问题 首先我们需要问自己什么是意向锁&#xff1f; 为什么要有意向锁&#xff1f; 意向锁如何使用&#xff1f; 概念 mysql官网上对于意向锁的解释中有这么一句话 The main purpose of IX and IS locks is to show that …...

输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。

input_strinput("请输入一行字符: ") letter0 #表示英文字母的个数 space0 #表示空格的个数 digit0 # 表示数字的个数 others0 #表示其它字符的个数for char in input_str:if char.isalpha(): #判断字符char是否字母letter1elif char.isspace(): # 判断是否空格space…...

AD电路仿真

目录 0 前言 仿真类型 仿真步骤 仿真功能及参数设置 仿真模型 应用优势 1 新建原理图 2 放置元器件及布线 3 放置探头 4 实验结果 Operating Point 分析的作用 DC Sweep 的主要功能 Transient Analysis 的主要功能 AC Analysis 的功能 5 总结 1. 直流工作点分析…...

vim 中粘贴内容时提示: -- (insert) VISUAL --

目录 问题现象&#xff1a;解决方法&#xff1a;问题原因&#xff1a; 问题现象&#xff1a; 使用 vim 打开一个文本文件&#xff0c;切换到编辑模式后&#xff0c;复制内容进行粘贴时有以下提示&#xff1a; 解决方法&#xff1a; 在命令行模式下禁用鼠标支持 :set mouse …...

Redis_Redission的入门案例、多主案例搭建、分布式锁进行加锁、解锁底层源码解析

目录 ①. Redis为什么选择单线程&#xff1f; ②. 既然单线程这么好,为什么逐渐又加入了多线程特性&#xff1f; ③. redis6的多线程和IO多路复用入门篇 ④. Redis6.0默认是否开启了多线程&#xff1f; ⑤. REDIS多线程引入总结 ①. Redis为什么选择单线程&#xff1f; ①…...

ZZNUOJ(C/C++)基础练习1021——1030(详解版)

目录 1021 : 三数求大值 C语言版 C版 代码逻辑解释 1022 : 三整数排序 C语言版 C版 代码逻辑解释 补充 &#xff08;C语言版&#xff0c;三目运算&#xff09;C类似 代码逻辑解释 1023 : 大小写转换 C语言版 C版 1024 : 计算字母序号 C语言版 C版 代码逻辑总结…...

力扣116. 填充每个节点的下一个右侧节点指针

Problem: 116. 填充每个节点的下一个右侧节点指针 文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的先序遍历) 本题目的难点在于对于不同父节点的邻接问题因此我们可以抽象将两两节点为一组&#xff08;不同父节点的两个孩子节点也抽象为一组&#xff09…...

寒武纪MLU370部署deepseek r1

文章目录 前言一、平台环境准备二、模型下载三、环境安装四、代码修改五、运行效果 前言 DeepSeek-R1拥有卓越的性能&#xff0c;在数学、代码和推理任务上可与OpenAI o1媲美。其采用的大规模强化学习技术&#xff0c;仅需少量标注数据即可显著提升模型性能&#xff0c;为大模…...

Python NumPy(10):NumPy 统计函数

1 NumPy 统计函数 NumPy 提供了很多统计函数&#xff0c;用于从数组中查找最小元素&#xff0c;最大元素&#xff0c;百分位标准差和方差等。 1.1 numpy.amin() 和 numpy.amax() numpy.amin() 用于计算数组中的元素沿指定轴的最小值。 numpy.amin(a, axisNone, outNone, keep…...

Ubuntu下的Doxygen+VScode实现C/C++接口文档自动生成

Ubuntu下的DoxygenVScode实现C/C接口文档自动生成 Chapter1 Ubuntu下的DoxygenVScode实现C/C接口文档自动生成1、 Doxygen简介1. 安装Doxygen1&#xff09;方法一&#xff1a;2&#xff09;方法二&#xff1a;2. doxygen注释自动生成插件3. doxygen注释基本语法4. doxygen的生成…...

【字符串两大注意事项】

表达字符串的方式 1.双引号&#xff1a;"hello world" 2.字符指针&#xff1a;char* ptr "hello world" 3.字符数组&#xff1a;char arr[] "hello world"辨析 项目表示方式代表含义内存分布1“hello world”字符串字面量字符串常量就是数据…...

jmap命令详解

jmap 用于生成 heap dump 文件&#xff0c;如果不使用这个命令&#xff0c;还可以使用-XX:HeapDumpOnOutOfMemoryError参数来让虚拟机出现 OOM 的时候自动生成 dump 文件。 jmap 不仅可以生成 dump 文件&#xff0c;还可以查询finalize执行队列、Java 堆的详细信息&#xff0c…...

微机原理与接口技术期末大作业——4位抢答器仿真

在微机原理与接口技术的学习旅程中&#xff0c;期末大作业成为了检验知识掌握程度与实践能力的关键环节。本次我选择设计并仿真一个 4 位抢答器系统&#xff0c;通过这个项目&#xff0c;深入探索 8086CPU 及其接口技术的实际应用。附完整压缩包下载。 一、系统设计思路 &…...

FOC核心原理的C语言实现

概述 应用FOC算法&#xff0c;比如无人机、电动汽车或工业电机控制。因此&#xff0c;除了理论&#xff0c;还需要提供实用的实现步骤、常见问题及解决方案&#xff0c;比如如何获取电机的位置信息&#xff08;编码器或传感器&#xff09;&#xff0c;如何处理电流采样&#x…...

基于互联网+智慧水务信息化整体解决方案

智慧水务的概述与发展背景 智慧水务是基于互联网、云计算、大数据、物联网等先进技术&#xff0c;对水务行业的工程建设、生产管理、管网运营、营销服务及企业综合管理等业务进行全面智慧化管理的创新模式。它旨在解决水务企业分散经营、管理水平不高、投资不足等问题。 水务…...

【信息系统项目管理师-选择真题】2005下半年综合知识答案和详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7~8题】【第9~10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第21题】【第22题…...

计算机毕业设计Python+CNN卷积神经网络考研院校推荐系统 考研分数线预测 考研推荐系统 考研爬虫 考研大数据 Hadoop 大数据毕设 机器学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

第十一章 F - H 开头的术语

文章目录 第十一章 F - H 开头的术语文件流 (file stream)最终类 (final class)最终方法 (final method)最终属性 (final property)外键 (foreign key)基础 (foundation) 以 G 开头的术语全局 (global)全局数据库 (globals database)全局目录 (global directory)全局唯一标识符…...

深度研究新范式:通过Ollama和DeepSeek R1实现自动化研究

引言 在信息时代&#xff0c;海量数据的产生与传播速度前所未有地加快&#xff0c;这既为研究者提供了丰富的资源&#xff0c;也带来了信息筛选与处理的巨大挑战。 传统研究方法往往依赖于研究者的个人知识库、文献检索技能以及时间投入&#xff0c;但面对指数级增长的数据量…...

深度学习的应用

目录 一、机器视觉 1.1 应用场景 1.2 常见的计算机视觉任务 1.2.1 图像分类 1.2.2 目标检测 1.2.3 图像分割 二、自然语言处理 三、推荐系统 3.1 常用的推荐系统算法实现方案 四、图像分类实验补充 4.1 CIFAR-100 数据集实验 实验代码 4.2 CIFAR-10 实验代码 深…...

基于51单片机和WS2812B彩色灯带的流水灯

目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码四、主函数总结 系列文章目录 前言 用彩色灯带按自己想法DIY一条流水灯&#xff0c;谁不喜欢呢&#xff1f; 所用单片机&#xff1a;STC15W204S &#xff08;也可以用其他1T单片机&#xff0c;例如&#xff0c;S…...

DFS(深度优先搜索)与回溯算法详解

DFS&#xff08;深度优先搜索&#xff09;与回溯算法详解 一、DFS 基础 1. 什么是DFS&#xff1f; 深度优先搜索&#xff08;Depth-First Search&#xff0c;DFS&#xff09;是一种用于遍历或搜索树或图的算法。其核心思想是&#xff1a; 一条路走到黑&#xff1a;从起点出发…...