C语言——二周目——输入输出辨析

一、对输入输出的理解

1.明确输入的意义

        以往的输入为默认形式(标准输入流——stdin——键盘)。但是输入的形式不止此一种。可以从键盘上敲出输入的数据,同时也可以将文件中、某个字符串甚至结构体的数据作为输入内容进行输入。

        输入,即为从某个地方获取数据。如各种get家族、各种scanf家族、以及fwrite,均是选择一个数据来源,获取该来源的数据。

2.明确输出的意义

        同输入一样,以往的输出也为默认形式(标准输出流——stdout——屏幕)。输出的形式也不止此一种。可以在屏幕上显示输出的内容,同时也可以以文件、某个字符串等作为输出的位置,将内容输出至该位置。

        输出,即为将内容呈现在某个地方。如put家族、printf家族、fread,均为将获取的内容,输出到一个选择好的地方。

3.输入输出的区分

        如果在操作数据的时候,总是感觉输入输出傻傻分不清,那我想应该是没有把握住输入输出的核心要义,输入输出实际上是读或者写的一个过程。

        当需要编辑一个文件、字符串等的内容时,实际上是需要将已有内容放入其中,逻辑很明显是选择一个地方来呈现内容,所以需要输出函数帮助;

        当需要使用一个文件等的内容时,实际上是需要获取其中的内容,很明显属于输入函数的范畴。

二、输入输出函数辨析

 

        这样打眼一看,感觉输入输出函数好多呀,怎么能区分的清楚呢?其实不难发现,这些函数基本主体就是put/get 和 printf/scanf,另外加了个前缀或后缀。

1.put/get <=> printf/scanf

        这两组函数区别在于是否为格式化输出输入,从参数可以发现put/get组合不考虑内容的格式,而printf/scanf需要规定格式化的输入输出。

2.[printf/scanf] 无前缀 <=> f-前缀 <=> s-前缀

        在我看来,前缀的主要作用就是说明该函数的输入输出流。

        无前缀是针对标准输出输出流,即只能通过键盘屏幕来输入输出。

        f-前缀是针对文件的输入输出流,传参传递文件指针即可。

        s-前缀是针对字符串的输入输出流,传参传递字符串地址即可。

3.[put/get] f-前缀 <=> -s后缀 <=> -c后缀 <=> -char后缀

        f-前缀是针对文件的输入输出流,需要额外传递文件指针。

        -s后缀函数作用于操作内容为字符串的情况。

        -c和-char后缀函数作用于操作内容为字符的情况。

4.补充说明

        要对“流”有一个正确的认识,尽管专门用于文件操作的函数具有 FILE* stream 这样一个参数,但是我们要明白我们平时所使用的输入输出流只不过将这个参数默认为了stdin/stdout 而已,所以如果在文件操作函数的流参数处传递标准输入输出流,即可达成与常规的输入输出流相同的作用。

三、其他输入输出函数

二进制文件读写——fread/fwrite

第一个参数指输入内容指针,第二个参数指输入内容大小,第三个参数指输入个数,第四个指输入流(函数限制输入流只能是文件,所以此处应为文件指针)。

 第一个参数指作为存储输出流内容的地址,第二个参数指输出内容的大小,第三个参数指输出内容的个数,第四个参数指输出流(也只能为文件指针)。

struct S
{char name[20];int age;doubel score;
};int main()
{struct S s = {"张三",20,55.6};struct S tmp = {0};FILE* pf = fopen("test.txt","wb"};if(pf==NULL){return 0;}//二进制的形式写文件fwrite(&s,szieof(struct S),1,pf);//二进制的形式读文件fread(&tmp,sizeof(struct S),1,pf);printf("%s %d %lf\n",tmp.name,tmp.age;tmp.score);fclose(pf);pf = NULL;return 0;
}

注:随机读写放在了另一篇博客内,需要的朋友可以自行浏览。

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

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

相关文章

Required MultipartFile parameter ‘file‘ is not present

出现这个原因我们首先想到的是加一个RequestParam("file")&#xff0c;但是还有可能的原因是因为我们的名字有错误 <span class"input-group-addon must">模板上传 </span> <input id"uploadFileUpdate" name"importFileU…

采用Spring Boot框架开发的医院预约挂号系统3e3g0+vue+java

本医院预约挂号系统有管理员&#xff0c;医生和用户。管理员功能有个人中心&#xff0c;用户管理&#xff0c;医生管理&#xff0c;科室信息管理&#xff0c;预约挂号管理&#xff0c;用户投诉管理&#xff0c;投诉处理管理&#xff0c;通知公告管理&#xff0c;科室分类管理。…

python爬虫入门详细教程-采集云南招聘网数据保存为csv文件

目录 网站地址数据提取技术介绍采集目标流程分析python代码实现教程和代码仅供学习交流&#xff0c;请勿用于其他非法用途&#xff01;欢迎加入python学习交流QQ群&#xff1a;891938703 网站地址 https://www.ynzp.com/ 这个网址特别适合新手拿来练习&#xff0c;你采集多了还…

【Java基础面试二十四】、String类有哪些方法?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;String类有哪些方法&…

10.17课上(七段显示器,递归异或与电路)

异或的递归与数电实现 用二选一选择器实现异或函数 在异或当中&#xff0c;如果有一项为0&#xff0c;就可以把那一项消掉&#xff1b;如果有一项为1&#xff0c;就是把剩下的所有项运算完的结果取反 &#xff08;由此在算法当中可以采用递归解决&#xff09; 当w1为0时&…

CleanMyMac苹果电脑清理软件是智商税吗?最全评测价格、清理效果一次说清

这是一篇CleanMyMac最全评测&#xff01;价格、清理效果一次说清&#xff0c;告诉你它真不是智商税! 升级Ventura系统之前&#xff0c;我用的是CleanMyMac X绿色版&#xff08;绝不提倡这个行为&#xff09;。更新到Ventura之后&#xff0c;之前很多绿色软件失效&#xff0c;浪…

TP5.1 导出excel文件

在 ThinkPHP 5.1 中引入 PHPExcel&#xff08;现在已被官方弃用&#xff0c;推荐使用 PhpSpreadsheet&#xff09;时&#xff0c;可以按照以下步骤进行操作&#xff1a; 在 composer.json 文件中添加 PHPExcel&#xff08;PhpSpreadsheet&#xff09;的依赖项。找到 require 部…

Pygame中实现图片的移动

在《Pygame中将鼠标形状设置为图片2-1》和《Pygame中将鼠标形状设置为图片2-2》中提到将鼠标设置为指定图片。接下来在该文章涉及到的代码基础之上&#xff0c;实现图片的移动&#xff0c;效果如图1所示。 图1 图片移动效果 从图1中可以看出&#xff0c;导入一个大猩猩的图片&…

DayDreamInGIS 逆地理编码工具(根据经纬度获取位置描述)插件源码解析

本工具调用高德地图逆地理编码api&#xff0c;根据高的地图逆地理编码api&#xff0c;实现根据经纬度获取位置描述。 总体设计逻辑&#xff0c;窗体采用WPF&#xff0c;通过属性的方式传递交互对象&#xff0c;核心处理逻辑写到button的执行逻辑中。 1.页面 页面XAML&#xf…

掌握JavaScript的练习之道:十个手写函数让你信手拈来!

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

MySQL事务MVCC详解

一、概述 MVCC (MultiVersion Concurrency Control) 叫做多版本并发控制机制。主要是通过数据多版本来实现读-写分离&#xff0c;做到即使有读写冲突时&#xff0c;也能做到不加锁&#xff0c;非阻塞并发读&#xff0c;从而提高数据库并发性能。 MVCC只在已提交读&#xff08…

行业追踪,2023-10-18

自动复盘 2023-10-18 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

Docker是一个流行的容器化平台,用于构建、部署和运行应用程序。

文章目录 Web应用程序数据库服务器微服务应用开发环境持续集成和持续部署 (CI/CD)应用程序依赖项云原生应用程序研究和教育 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&#xff1a;…

mysql查看连接池的命令

查看实时连接的个数 &#xff08;瞬时值&#xff09; SHOW STATUS LIKE Threads_connected; 查看具体的链接信息 show full processlist; 数据库链接池常见的报错 Cannot create PoolableConnectionFactory (Data source rejected establishment of connection, message fr…

Android Fragment 基本概念和基本使用

Android Fragment 基本概念和基本使用 一、基本概念 Fragment&#xff0c;简称碎片&#xff0c;是Android 3.0&#xff08;API 11&#xff09;提出的&#xff0c;为了兼容低版本&#xff0c;support-v4库中也开发了一套Fragment API&#xff0c;最低兼容Android 1.6。 过去s…

Swift使用Embassy库进行数据采集:热点新闻自动生成器

概述 爬虫程序是一种可以自动从网页上抓取数据的软件。爬虫程序可以用于各种目的&#xff0c;例如搜索引擎、数据分析、内容聚合等。本文将介绍如何使用Swift语言和Embassy库编写一个简单的爬虫程序&#xff0c;该程序可以从新闻网站上采集热点信息&#xff0c;并生成一个简单…

Redis的五大基础数据类型

String 字符串类型&#xff0c;通过set关键字和get关键字来设置字符串键值对和获取字符串键值对。 hash 哈希类型&#xff0c;结构和Map<String,Map<String,stirng>>类似。 使用hset来设置哈希&#xff0c;使用hget来获取哈希&#xff0c;hget要精确到第二个key…

苍穹外卖(八) 使用WebSocket协议完成来单提醒及客户催单功能

WebSocket介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信(双向传输)——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c; 并进行双向数据传输。 HTTP协议和WebSocket协议对比&#xff1a; HTTP…

2022年下半年 软件设计师 上午试卷(前21题)

以下关于RISC&#xff08;精简指令集计算机&#xff09;特点的叙述中&#xff0c;错误的是 &#xff08;1&#xff09; 。 &#xff08;1&#xff09; A. 对存储器操作进行限制&#xff0c;使控制简单化 B. 指令种类多&#xff0c;指令功能强 C. 设置大量通用寄存器 D. 选…

【算法|动态规划No.23】leetcode376. 摆动序列

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…