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

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

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

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

相关文章

广和通发布基于高通高算力芯片的具身智能机器人开发平台Fibot

3月29日&#xff0c;为助力机器人厂商客户快速复现及验证斯坦福Mobile ALOHA机器人的相关算法&#xff0c;广和通发布具身智能机器人开发平台Fibot。作为首款国产Mobile ALOHA机器人的升级配置版本&#xff0c;开发平台采用全向轮底盘设计、可拆卸式训练臂结构&#xff0c;赋予…

黑马鸿蒙笔记2

1.图片设置&#xff1a; 1 加载网络图片&#xff0c;申请权限。 申请权限&#xff1a;entry - src - resources - module.json5 2 加载本地图片 ,两种加载方式 API 鼠标悬停在Image&#xff0c; 点击show in API Reference interpolation&#xff1a;看起来更加清晰 resou…

【JavaSE】java刷题--数组练习

前言 本篇讲解了一些数组相关题目&#xff08;主要以代码的形式呈现&#xff09;&#xff0c;主要目的在于巩固数组相关知识。 上一篇 数组 讲解了一维数组和二维数组的基础知识~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎…

网站怎么免费获取HTTPS证书?

申请HTTPS证书可以按照以下简单步骤进行&#xff1a; 1. 确定证书类型 根据你的网站性质和需求&#xff0c;选择合适的HTTPS证书类型。常见的有&#xff1a; - DV&#xff08;域名验证&#xff09;证书&#xff1a;适用于个人网站或小型项目&#xff0c;只需验证域名所有权&…

计算机网络—UDP协议详解:特性、应用

​ &#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;マリンブルーの庭園—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 3:34 &#x1f504; ◀…

Linux---命令行参数

一、命令行参数 在介绍命令行参数前&#xff0c;我想问大家一个问题&#xff0c;在以前写C/C时&#xff0c;main 函数可不可以带参数&#xff1f; 答案是可以带的&#xff0c;int main(int argc, char* argv[]){}&#xff0c;但平时写代码时也证明了&#xff0c;main 函数的参…

uniapp对接极光推送(国内版以及海外版)

勾选push&#xff0c;但不要勾选unipush 国内版 网址&#xff1a;极光推送-快速集成消息推送功能,提升APP运营效率 (jiguang.cn) 进入后台&#xff0c;并选择对应应用开始配置 配置安卓包名 以及ios推送证书&#xff0c;是否将生产证书用于开发环境选择是 ios推送证书…

五款常用在线JavaScript加密混淆工具详解:jscrambler、JShaman、jsfack、ipaguard和jjencode

摘要 本篇技术博客将介绍五款常用且好用的在线JavaScript加密混淆工具&#xff0c;包括 jscrambler、JShaman、jsfack、freejsobfuscator 和 jjencode。通过对这些工具的功能及使用方法进行详细解析&#xff0c;帮助开发人员更好地保护和加密其 JavaScript 代码&#xff0c;提…

Linux学习教程 Linux入门教程(超全面 超详细)收藏这一篇就够了

Linux是什么&#xff1f; linux是一个开源、免费的操作系统&#xff0c;其稳定性、安全性、处理多并发能力已经得到业界的认可&#xff0c;目前大多数企业级应用甚至是集群项目都部署运行在linux操作系统之上&#xff0c;很多软件公司考虑到开发成本都首选linux&#xff0c;在…

【NFS】NFS使用汇总

1. NFS介绍 NFS(Network File System)&#xff0c;网络文件系统&#xff0c;它可以让不同主机能够通过 TCP/IP 网络共享资源。它从宏观主体上简化来看&#xff0c;就是两部分&#xff1a;服务端和客户端。 服务端&#xff0c;可以认为它就是来存东西的&#xff0c;这个东西对…

蓝桥杯刷题_day7_动态规划_路径问题

文章目录 DAY7下降路径最小和最小路径和地下城游戏 DAY7 下降路径最小和 【题目描述】 给你一个 n x n 的 方形 整数数组 matrix &#xff0c;请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始&#xff0c;并从每一行中选择一个元…

【Java面试题】Redis中篇(高可用:主从复制、哨兵、集群)

文章目录 高可用14.Redis如何保证高可用&#xff1f;15.Redis的主从复制&#xff1f;16.Redis主从有几种常见的拓扑结构&#xff1f;17.Redis的主从复制原理了解吗&#xff1f;18.说说主从数据同步的方式&#xff1f;19.主从复制存在的问题&#xff1f;20.Redis Sentinel(哨兵)…

信息素养和社会责任

1.信息素养&#xff1a; 信息素养是一种了解、收集、评估、和利用信息的知识结构能力。 信息素养的四个要素&#xff1a;信息意识&#xff0c;信息知识&#xff0c;信息能力&#xff0c;信息道德 信息意识是先导&#xff08;前提&#xff09;&#xff0c;是对关键信息具有持…

elementui的table根据是否符合需求合并列

<el-table :data"tableData" border style"width: 100%;" :span-method"objectSpanMethodAuto"><!-- 空状态 --><template slot"empty"><div><img src"/assets/images/noData.png" /></di…

基于SSM+Jsp+Mysql的母婴用品网站

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

新能源汽车充电桩主板的常见故障及解决办法

电桩主板作为充电桩的核心组件&#xff0c;直接影响着充电桩运行的安全性与稳定性。然而&#xff0c;在使用过程中&#xff0c;充电桩主板会因多种原因而出现一些故障情况&#xff0c;了解这些原因并采取相应的应对方法对维护充电桩的正常运行起着至关重要的作用。接下来&#…

3-zookeeper之ZAB协议

Zookeeper ZAB协议 概述 ZAB(Zookeeper Automic Broadcast)是一套专门为Zookeeper设计的用于进行原子广播和崩溃恢复的协议ZAB协议主要包含了两个功能 原子广播&#xff1a;保证数据一致性崩溃恢复&#xff1a;保证集群的高可用 ZAB协议本身是基于2PC算法来进行的设计&#…

U盘位置不可用,如何轻松应对数据恢复难题

在日常工作和生活中&#xff0c;U盘作为一种便捷的存储设备&#xff0c;经常被用于数据传输和备份。然而&#xff0c;有时我们可能会遇到这样一个问题&#xff1a;当插入U盘时&#xff0c;系统提示“位置不可用”或“无法访问”&#xff0c;这让人倍感困扰。面对这种情况&#…

wpsword求和操作教程

wpsword求和怎么操作&#xff1a; 1、首先&#xff0c;单纯的数据是无法求和的&#xff0c;所以我们必须要“插入”一个“表格” 2、接着将需要求和的数据填入到表格中。 3、填完后&#xff0c;进入“布局”选项卡。 4、然后打开其中的“公式” 5、在其中选择求和公式“SUM”并…

从0到1部署私域NuGet库:实战指南,让你轻松掌握!

引言 私域NuGet包的重要性&#xff1a;代码复用和团队协同。通过将公共组件、库或工具打包成NuGet包&#xff0c;并在私域中共享&#xff0c;团队成员可以更方便地引用和使用这些资源。其次私域NuGet包有助于依赖管理。通过私域NuGet包&#xff0c;团队可以集中管理这些依赖&a…