C语言-printf和scanf的区别详解

fprintf(指定的格式写到文件里面。适用于所有的输出流,可以打印在屏幕上面)+fscanf(指定的格式读取出来,适用于所有的输入流)

 fprintf(指定的格式写到文件里面)

两个函数是一样的

打开文件

写文件 fprintf以指定的格式写到信息里面

同时这里是文本的形式写进去的 因为我们都读得懂

代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
struct MyStruct
{
	char name[20];
	int age;
};
int main()
{
	struct MyStruct s = { "张三",23 };
	FILE* ps = fopen("fprintf.txt", "w");//这里我们进行写入一个文件,没有的话会自动创建一个文件
	if (ps == NULL)
	{
		perror("fopen:w:");
		return 1;
	}
	fprintf(ps, "%s %d", s.name, s.age);//以指定格式写入文件
	fclose(ps);//关闭文件
	ps = NULL;//指针指向空指针


	return 0;
}

—————————————————————————————————————————— 

fscanf(指定的格式读取出来,适用于所有的输入流)

同理这个和scanf是一样的

数组名本身就是地址

fscanf

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
struct MyStruct
{
	char name[20];
	int age;
};
int main()
{
	struct MyStruct s = { "张三",23 };
	FILE* ps = fopen("fprintf.txt", "w");
	if (ps == NULL)
	{
		perror("fopen:w:");
		return 1;
	}
	//这里是把内容写到文件里面
	fprintf(ps, "%s %d", s.name, s.age);//写入文件
	fclose(ps);
	ps = NULL;


	//只读,因为你剩下的操作是文件读取,所以这里不行w,但是可以是只读,读取文件
	FILE* pf = fopen("fprintf.txt", "r");
	if (pf == NULL)
	{
		perror("fopen:r:");
		return 1;
	}
	//这里是读取内容,不读取是无法直接打印文件内容的
	fscanf(pf, "%s %d", s.name, &(s.age));//数组首元素就是地址 不需要取地址 ,此时也就是读取成功

	printf("%s %d\n", s.name, s.age);//表纯输出流打印文件

	fprintf(stdout, "%s %d\n", s.name, s.age);//指定输出流,打印文件
	fclose(pf);
	pf = NULL;

	return 0;
}

———————————————————————————————————————————

fprintf(可以打印在屏幕上面)

适用于所有的输出流,可以打印在屏幕上面

也就是你可以用fprintf写写入里面,用fscanf进行读取,再用fprintf进行打印

当然这里前面的参数是文件,我们指向的是文件,然后才能打印出来

stdout(补充说明)

stdout 是 C 标准库中的一个文件流,代表标准输出。标准输出通常指的是计算机屏幕,但它也可以被重定向到其他地方,比如一个文件。在 C 语言中,stdout 用于打印程序的输出信息,比如 printf 函数和 fprintf 函数输出的内容。

当你调用 printf 或者 fprintf 函数时,如果不指定文件指针参数,这些函数会默认使用 stdout 作为输出目标。例如:

printf("Hello, World!");

这行代码会将在 stdout 上打印 "Hello, World!"。默认情况下,stdout 指向控制台(屏幕),所以你会在屏幕上看到输出。

你还可以将 stdout 重定向到文件。例如,你可以使用系统命令行将输出重定向到文件:

./program > output.txt

这会使得 program 程序的标准输出被重定向到 output.txt 文件,而不会在屏幕上显示任何内容。

在 C 程序中,你也可以显式地将输出写入 stdout:

fprintf(stdout, "This will go to the screen or a file if redirected.\n");

因为这个不是标准输出流,是指定输出流,所以我们可以指定格式。

这里我们发现我们可以用fprintf函数打印出来

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
struct MyStruct
{
	char name[20];
	int age;
};
int main()
{
	struct MyStruct s = { "张三",23 };
	FILE* ps = fopen("fprintf.txt", "w");
	if (ps == NULL)
	{
		perror("fopen:w:");
		return 1;
	}
	//这里是把内容写到文件里面
	fprintf(ps, "%s %d", s.name, s.age);//写入文件
	fclose(ps);
	ps = NULL;


	//只读,因为你剩下的操作是文件读取,所以这里不行w,但是可以是只读,读取文件
	FILE* pf = fopen("fprintf.txt", "r");
	if (pf == NULL)
	{
		perror("fopen:r:");
		return 1;
	}
	//这里是读取内容,不读取是无法直接打印文件内容的
	fscanf(pf, "%s %d", s.name, &(s.age));//数组首元素就是地址 不需要取地址 

	printf("%s %d\n", s.name, s.age);//表纯输出流打印文件

	fprintf(stdout, "%s %d\n", s.name, s.age);//指定输出流,打印文件
	fclose(pf);
	pf = NULL;

	return 0;
}

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

sprintf(指定格式转化成字符串)+sscanf(字符串转化成指定格式)

sprintf(指定格式转化成字符串)

格式化的数据转化成字符串sprintf

sprintf 是一个在 C 语言中定义的函数,它的作用是将格式化的字符串和参数转换成字符串,并将结果存储在指定的字符数组中。因此,sprintf 可以用来将文件中的文档内容转化成字符串,也可以用来将刚编写的结构体代码转化为字符串。具体使用方式取决于程序的具体需求。 

这里已经转化为字符串

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
struct MyStruct
{
	char name[20];
	int age;
};
int main()
{
	struct MyStruct s = { "张三",23 };
	FILE* ps = fopen("fprintf.txt", "w");
	if (ps == NULL)
	{
		perror("fopen:w:");
		return 1;
	}
	//这里是把内容写到文件里面
	fprintf(ps, "%s %d", s.name, s.age);//写入文件
	fclose(ps);
	ps = NULL;


	//只读,因为你剩下的操作是文件读取,所以这里不行w,但是可以是只读,读取文件
	FILE* pf = fopen("fprintf.txt", "r");
	if (pf == NULL)
	{
		perror("fopen:r:");
		return 1;
	}
	//这里是读取内容,不读取是无法直接打印文件内容的
	fscanf(pf, "%s %d", s.name, &(s.age));//数组首元素就是地址 不需要取地址 

	//转化为字符串的形式
	char buf[100] = { 0 };//因为是转化成字符串的形式,所以需要用一个数组进行接收
	sprintf(buf, "%s %d", s.name, s.age);
	printf("字符串打印:  %s \n", buf);
    
    fclose(pf);
	pf = NULL;

	return 0;
}

———————————————————————————————————————————

sscanf(字符串转化成指定格式)

sscanf语法说明

这里是 从结构体读取数据

这里是从buf里面读取

所以sscanf也就是前面加上一个需要读取的名称

两次打印的对比,一样的,但是此时已经不是字符串的格式已经是指定的格式了

 代码总结

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
struct MyStruct
{
	char name[20];
	int age;
};
int main()
{
	struct MyStruct s = { "张三",23 };
	FILE* ps = fopen("fprintf.txt", "w");
	if (ps == NULL)
	{
		perror("fopen:w:");
		return 1;
	}
	//这里是把内容写到文件里面
	fprintf(ps, "%s %d", s.name, s.age);//写入文件
	fclose(ps);
	ps = NULL;


	//只读,因为你剩下的操作是文件读取,所以这里不行w,但是可以是只读,读取文件
	FILE* pf = fopen("fprintf.txt", "r");
	if (pf == NULL)
	{
		perror("fopen:r:");
		return 1;
	}
	//这里是读取内容,不读取是无法直接打印文件内容的
	fscanf(pf, "%s %d", s.name, &(s.age));//数组首元素就是地址 不需要取地址 

	//转化为字符串的形式
	char buf[100] = { 0 };//因为是转化成字符串的形式,所以需要用一个数组进行接收
	sprintf(buf, "%s %d", s.name, s.age);
	printf("字符串打印:  %s \n", buf);

	//字符串转化为带有格式的形式
	sscanf(buf, "%s %d", s.name, &(s.age));//我们这里还是这个格式, 把数组转化成格式给到结构体里面
	fprintf(stdout, "按照格式打印:%s %d\n", s.name, s.age);//指定输出流,打印文件
	fclose(pf);
	pf = NULL;

	return 0;
}

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

printf(标准输出流)+scanf(标准输入流)+函数的总结

这里说明一下,printf和scanf经常使用,就不详细举例,直接进行说明。

在C语言中,printf、fprintf、sprintf、scanf、sscanf和fscanf是用于输入和输出数据的函数。下面是它们的区别和通常的使用场景:

  1. printf
    • printf函数用于将格式化的数据输出到标准输出(通常是终端或控制台)。
    • 它不会在输出字符串的末尾添加换行符,所以如果需要换行,需要在格式字符串中显式包含\n。
    • 示例:printf("Hello, World!\n"
  1. fprintf
    • fprintf函数用于将格式化的数据输出到任意指定的文件指针(FILE *)。
    • 它可以将数据输出到文件、网络流等。
    • 示例:FILE *fp = fopen("file.txt", "w"); fprintf(fp, "Hello, World!\n"); fclose(fp);
  1. sprintf
    • sprintf函数用于将格式化的数据输出到一个字符数组或字符串。简单的说就是转化成字符串格式
    • 它不会在输出字符串的末尾添加换行符。
    • 示例:char buffer[100]; sprintf(buffer, "Hello, World!\n"); printf("%s", buffer);

  1. scanf
    • scanf函数用于从标准输入(通常是键盘)读取格式化的数据。
    • 它等待用户输入,并根据指定的格式解析输入的数据。
    • 示例:int num; scanf("%d", &num); printf("You entered: %d\n", num);
  1. sscanf
    • sscanf函数用于从字符串中读取格式化的数据。可以把字符串转化为任何你需要的格式
    • 它将字符串中的数据按照指定的格式解析成变量。
    • 示例:char str[] = "1234"; int num; sscanf(str, "%d", &num); printf("You entered: %d\n", num);
    • 可以把字符串转化为任何你需要的格式
  1. fscanf
    • fscanf函数用于从任意指定的文件指针读取格式化的数据。
    • 它可以从文件、网络流等读取数据。
    • 示例:FILE *fp = fopen("file.txt", "r"); int num; fscanf(fp, "%d", &num); fclose(fp); printf("You entered: %d\n", num);

格式化的数据就是带有格式的数据

比如整形 字符 浮点型

看到结构体不方便 需要转化为字符串 那就是 sprintf

需要转化回来 那就用sscanf, fscanf

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/501656.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DFS:二叉树的深搜与回溯

一、计算布尔二叉树的值 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool evaluateTree(TreeNode* root) {if(root->leftnullptr) return root->val0?false:true; bool left evaluateTree(root->left);bool rightevaluateTree(root->rig…

B096-docker版jenkins环境搭建

目录 Jenkins持续集成工具的介绍Jenkins安装过程案例 tips&#xff1a;ssm项目需要放到tomcat中运行&#xff0c;springboot项目不需要&#xff0c;内置有tomcat&#xff0c;可直接命令行运行 Jenkins持续集成工具的介绍 Jenkins安装过程 docker版Jenkins需要先安装docker环境…

ES6 学习(二)-- 字符串/数组/对象/函数扩展

文章目录 1. 模板字符串1.1 ${} 使用1.2 字符串扩展(1) ! includes() / startsWith() / endsWith()(2) repeat() 2. 数值扩展2.1 二进制 八进制写法2.2 ! Number.isFinite() / Number.isNaN()2.3 inInteger()2.4 ! 极小常量值Number.EPSILON2.5 Math.trunc()2.6 Math.sign() 3.…

vue3封装Element分页

配置当前页 配置每页条数 页面改变、每页条数改变都触发回调 封装分页 Pagination.vue <template><el-paginationbackgroundv-bind"$attrs":page-sizes"pageSizes"v-model:current-page"page"v-model:page-size"pageSize":t…

使用PopLDdecay软件绘制LD衰减图

前记 PopLDdecay是一款用于进行种群遗传学和关联分析的软件。它可以在全基因组水平上进行基因型数据的相关性和衰减分析&#xff0c;帮助研究人员探索种群间的遗传差异和突变选择的模式。 使用PopLDdecay可以实现以下功能&#xff1a; 遗传距离的计算&#xff1a;可以计算遗…

Python3:ModuleNotFoundError: No module named ‘elftools‘

问题背景 问题 ModuleNotFoundError: No module named ‘elftools’ 解决方法 pip3 install pyelftools 成功&#xff01;&#xff01;&#xff01;

最优算法100例之13-输出第n个丑数

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当…

瑞_23种设计模式_中介者模式

文章目录 1 中介者模式&#xff08;Mediator Pattern&#xff09;1.1 介绍1.2 概述1.3 中介者模式的结构1.4 中介者模式的优缺点1.5 中介者模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 &#x1f64a; 前言&#xff1a;本文章为瑞_系列专栏之《2…

【JAVA】Idea 右侧的gradle 不见了

1. 找到项目的build.gradle 文件&#xff0c;右键 2. 找到“Link Gradle Project”选项 3. 右侧就出现了gradle

记录一个写自定义Flume拦截器遇到的错误

先说结论&#xff1a; 【结论1】配置文件中包名要写正确 vim flume1.conf ... a1.sources.r1.interceptors.i1.type com.atguigu.flume.interceptor.MyInterceptor2$MyBuilder ... 标红的是包名&#xff0c;表黄的是类名&#xff0c;标蓝的是自己加的内部类名。这三个都…

wiztree免费的c盘清理软件

现如今&#xff0c;我们无论是工作还是学习&#xff0c;都已经离不开电脑了&#xff0c;经常使用电脑就会导致电脑的“垃圾”越来越多&#xff0c;从而导致磁盘爆红。 相信大家多多少少都体会过这大红的压迫感吧&#xff0c;想清理但是不敢删&#xff0c;不清理吧软件用不了&a…

ArcGIS支持下SWAT与CENTURY模型的结合:流域水碳氮综合模拟

目录 专题一 流域水碳氮建模 专题二 数据准备 专题三 流域水模拟 专题四 流域氮模拟 专题五 流域碳模拟 专题六 模型结果分析及地图制作 更多应用 基于ArcGIS的SWAT模型是一类比较典型的流域模型&#xff0c;结合SWAT模型和生物地球化学循环模型可以实现流域水碳氮综合模…

1.1 单片机的概念

一,单片机的概念 单片机(Single-Chip Microcomputer),也被称为单片微控制器,是一种集成电路芯片。它采用超大规模集成电路技术,将具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、…

怎么让ChatGPT批量写作原创文章

随着人工智能技术的不断发展&#xff0c;自然语言处理模型在文本生成领域的应用也日益广泛。ChatGPT作为其中的佼佼者之一&#xff0c;凭借其强大的文本生成能力和智能对话特性&#xff0c;为用户提供了一种高效、便捷的批量产出内容的解决方案。以下将就ChatGPT批量写作内容进…

蓝桥杯第十五届抱佛脚(五)DFS、BFS及IDS

蓝桥杯第十五届抱佛脚&#xff08;五&#xff09;DFS、BFS及IDS 深度优先搜索 DFS(Depth-First Search)即深度优先搜索,是一种用于遍历或搜索树或图的算法。它从根节点开始,尽可能沿着每一条路径直到这条路径最后一个节点被访问了,然后回退,继续访问下一条路径。它的基本思想…

亚米级分辨率卫星原始影像免费了

免费申请亚米级分辨率卫星原始影像(限学生) 引言 今天我去参加了长光卫星公司在北京举行的一个培训班&#xff0c;看到了一个宣传栏&#xff0c;挺有意思的&#xff0c;分享一下: 就是吉林长光给高校用户的一个影像福利&#xff0c;用来促进吉林一号的应用&#xff0c;你用长…

vue3+ts项目 | axios 的测试 | 测试接口

在 App.vue 中&#xff0c;测试接口 // 测试接口import request from /utils/request;import { onMounted } from vue;onMounted(() > {request.get(/hosp/hospital/1/10).then((res) > {console.log("APP组件展示获取的数据",res);})}) 在request.ts中&…

登录者个人信息查询

目录 &#x1f95e;1.vo层描述 &#x1f37f;2..vo层创建 &#x1f32d;3.编写controller层 &#x1f953;4.service层 &#x1f9c2;5.测试 1.vo层描述 Spring Boot项目中的实体类通常用于映射数据库表&#xff0c;包含了业务对象的所有属性。然而&#xff0c;前端或其…

C#手术麻醉系统源码 大型医院手麻系统4大需求是什么?

C#手术麻醉系统源码 大型医院手麻系统4大需求是什么&#xff1f; 手术麻醉临床信息系统有着完善的临床业务功能&#xff0c;能够涵盖整个围术期的工作&#xff0c;能够采集、汇总、存储、处理、展 现所有的临床诊疗资料。通过该系统的实施&#xff0c;能够规范手麻科的工作流程…

SD-WAN异地组网的实施步骤

SD-WAN的异地组网实施步骤可以分为几个关键阶段&#xff0c;每个阶段都需要仔细规划和有效执行。以下是一个基本的SD-WAN异地组网实施步骤&#xff1a; 1、网络评估和规划 在开始SD-WAN的异地组网实施之前&#xff0c;需要对现有网络进行评估&#xff0c;了解网络拓扑、连接情…