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

news2024/10/9 10:26:01

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EasyRecovery2024 安装步骤及功能特色介绍

在数字化时代&#xff0c;数据的重要性不言而喻。无论是个人用户还是企业用户&#xff0c;都可能面临数据丢失的风险。为了应对这一挑战&#xff0c;EasyRecovery作为一款专业的数据恢复软件&#xff0c;成为了越来越多人的选择。 EasyRecovery以其强大的功能和易用的界面&…

关于Kubernetes-v1.23.6-资源调度-StatefulSet-OnDelete当删除的时候才更新

前面提到的普通的滚动更新&#xff0c;都是修改完sts立即就会发生更新操作 而还有一种更新的策略为&#xff0c; OnDelete&#xff0c;即只有在 pod 被删除时会进行更新操作 还是先看一下web这个sts的当前更新策略如下&#xff1a; 这里我们修改&#xff0c;更新策略&#xf…

缓存数据库的意义、作用与种类详解

在现代计算机应用中&#xff0c;数据访问的性能往往是关键因素之一。随着数据量的增加和复杂应用的兴起&#xff0c;数据库的访问成本逐渐成为瓶颈。为了提高应用程序的响应速度、减轻后端数据库的负载压力&#xff0c;缓存数据库应运而生。 什么是缓存数据库&#xff1f; 缓存…

线程与同步

目录 一&#xff0c;线程概念 1&#xff0c;什么是线程 2&#xff0c;Linux 下的线程 3&#xff0c;POSIX 线程库 二&#xff0c;线程同步 1&#xff0c;数据不一致问题 2&#xff0c;如何解决这类问题 3&#xff0c;死锁 三&#xff0c;线程同步的运用 1&#xff0c…

知识图谱与大数据:区别、联系与应用

目录 前言1 知识图谱1.1 定义1.2 特点1.3 应用 2 大数据2.1 定义2.2 应用 3. 区别与联系3.1 区别3.2 联系 结语 前言 在当今信息爆炸的时代&#xff0c;数据成为了我们生活和工作中不可或缺的资源。知识图谱和大数据是两个关键概念&#xff0c;它们在人工智能、数据科学和信息…

Java基础之算数运算符的初级用法

运算符 运算符: 对字面量或者变量进行操作的符号 表达式: 用运算符把字面量或者变量连接起来,符合java语法的式子就可以称为表达式 不同运算符连接的表达式体现的是不同类型的表达式 一 .算数运算符 实践一下 加 减 乘 运行结果: 除 取模 运行结果 练习: 数值拆分 需求…

P5210A泰克P5210A高压差分探头

181/2461/8938产品概述&#xff1a; P5210A 是 Tektronix 的差分探头。差分探头是具有两个输入的有源探头。负输入和正输入连同驱动 50 欧姆电缆的地线以传输数字示波器通道的输出 泰克 P5210A 特性&#xff1a; 带宽&#xff1a;50 兆赫 差分电压&#xff1a;1000X&#xf…

LLMs之Grok-1.5:Grok-1.5的简介、安装和使用方法、案例应用之详细攻略

LLMs之Grok-1.5&#xff1a;Grok-1.5的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;xAI公司在不久前发布了Grok-1模型以及模型结构&#xff0c;揭示了公司到去年11月为止在大语言模型研发上的进步。2024年3月28日(美国时间)&#xff0c;xAI以“迅雷不及掩耳之势…

Image-Adaptive YOLO for Object Detection in Adverse Weather Conditions(IA-YOLO)

1、总体概述 基于深度学习的目标检测在常规条件的数据集可以获得不错的结果&#xff0c;但是在环境、场景、天气、照度、雾霾等自然条件的综合干扰下&#xff0c;深度学习模型的适应程度变低&#xff0c;检测结果也随之下降&#xff0c;因此研究在复杂气象条件下的目标检测方法…

为什么要学Python?Python的优势在哪?

人生苦短&#xff0c;我用 Python 不知道从什么时候开始流行这句话 Python 是个什么神仙编程语言 为啥全世界都在鼓励孩子学 Python 简单容易上手 国内、国际的竞赛机会多&#xff0c;含金量足 Python 好就业、薪资高 下面且看详细分析 01 什么是Python / 科技编程老师…

变分信息瓶颈

变分信息瓶颈和互信息的定义 1 变分信息瓶颈 定义&#xff1a;变分信息瓶颈&#xff08;Variational Information Bottleneck&#xff09;是一种用于学习数据表示的方法&#xff0c;它旨在通过最小化输入和表示之间的互信息来实现数据的压缩和表示学习。这种方法通常用于无监…

安装docker 并搭建出一颗爱心树

1、docker介绍 Docker 是⼀个开源的容器运⾏时软件&#xff08;容器运⾏时是负责运⾏容器的软件&#xff09;&#xff0c;基于 Go 语 ⾔编写&#xff0c;并遵从 Apache2.0 协议开源。 Docker可以让开发者打包⾃⼰的应⽤以及依赖到⼀个轻量的容器中&#xff0c;然后发布到任何…

代码随想录训练营Day36:● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

435. 无重叠区间 题目链接 https://leetcode.cn/problems/non-overlapping-intervals/description/ 题目描述 思路 直接统计重叠区间的个数&#xff0c;就是需要删除的个数 public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(a,b)-> Intege…

【火猫TV】NBA:快船突然崩盘众人迷茫,都是续约惹的祸!

本赛季快船队的表现就像过山车一般&#xff0c;起起伏伏让人看得惊心动魄&#xff0c;他们在赛季初期一度找不到胜利的办法&#xff0c;后来威少主动担任替补&#xff0c;球队将组织大权给了哈登&#xff0c;然后战绩一路飙升。可是到了赛季末&#xff0c;快船队的胜率出现了大…

2024软件设计师备考讲义——UML(统一建模语言)

UML的概念 用例图的概念 包含 <<include>>扩展<<exted>>泛化 用例图&#xff08;也可称用例建模&#xff09;描述的是外部执行者&#xff08;Actor&#xff09;所理解的系统功能。用例图用于需求分析阶段&#xff0c;它的建立是系统开发者和用户反复…

HarmonyOS 应用开发之UIAbility组件启动模式

UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景&#xff0c;系统提供了三种启动模式&#xff1a; singleton&#xff08;单实例模式&#xff09;multiton&#xff08;多实例模式&#xff09;specified&#xff08;指定实例模式&#xff09;…

Day24:回溯法 LeedCode 77.组合

回溯法解决的问题都可以抽象为树形结构 for循环就是遍历集合区间&#xff0c;可以理解一个节点有多少个孩子&#xff0c;这个for循环就执行多少次。 从图中看出for循环可以理解是横向遍历&#xff0c;backtracking&#xff08;递归&#xff09;就是纵向遍历&#xff0c;这样就把…

3D目标检测综述笔记

3D Object Detection for Autonomous Driving: A Review and New Outlooks https://arxiv.org/pdf/2206.09474.pdf 目录 0.background​编辑 1.1表示形式 1.2感知输入 1.3数据集 1.4评估指标 1. LiDAR-based 3D Object Detection 2.数据表征 2.1 point-based​ 2.1.…

iOS - Runloop的运行逻辑

文章目录 iOS - Runloop的运行逻辑1. 苹果官方的Runloop执行图2. Mode里面的东西2.1 Source02.2 Source12.3 Timers2.4 Observers 3. 执行流程3.1 注意点 4. Runloop休眠 iOS - Runloop的运行逻辑 1. 苹果官方的Runloop执行图 2. Mode里面的东西 2.1 Source0 触摸事件处理pe…

4G/5G防爆布控球

#防爆布控球 #远程实时监控 #移动应急指挥 #高清图像采集 #防爆安全认证 4G/5G防爆布控球 M130-EX防爆布控球是针对石化装置、石油平台、燃气、化工、制药、煤炭、冶炼、船舶制造、纺织等易燃易爆环境及危险场所而开发设计的防爆智能一体化电气设备。 产品型号&#xff1a;M13…