C语言(文件,流,键盘输入和输出以及文件结尾)

news2024/11/24 4:53:22

目录

一.文件

二.流

三.输入和输出

二.文件结尾

一.检测方法

二.不同的操作系统,文件结束方式

3.使用scanf检测EOF

一.文件

文件(file)是存储器中存储信息的区域。通常,文件都保存在某种永久存储器中。文件对于计算机系统相当重要

二.流

从概念上看,C程序处理的是流而不是直接处理文件。流是一个实际输入或输出映射的理想化数据流。这意味着不同属性和不同种类的输入,有属性更统一的流来表示。于是,打开文件的过程就是把流与文件相关联,而且读写都通过流来完成。

三.输入和输出

C把输入和输出设备视为存储设备上的普通文件,尤其是把键盘和显示设备视为每个C程序自动打开的文件。stdin流表示键盘输入,stdout流表示屏幕输出。Getchar(),putchar(),printf(),scanf()函数都是标准I/O包的成员来处理这两个流

C是一门强大,灵活的语言,有许多用于打开,读取,写入和关闭文件的库函数。从较低层面上,C可以使用主机操作系统的基本文件工具直接处理文件,这些直接调用操作系统的函数被称为底层I/O。

由于计算机系统各不相同,所以不可能为普通的底层I/O函数创建标准库,ANSI C也不打算这样做。然而从较高层面上,C还可以通过标准I/O报来处理文件。

二.文件结尾

一.检测方法

计算机操作系统要以某种方式判断文件的开始和结束

字符标记文件结尾:在文件末尾放一个特殊的字符标记文件的结尾。在大多数UNIX和Linux系统中,在一行开始处Ctrl+D读取文件结尾信号。许多微信计算机系统都把一行开始处的Ctrl+Z标识为文件结尾信号

存储文件大小的信息:比如文件有3000字节,程序在读到3000字节是便达到文件的末尾。MS-DOS及其相关系统使用这种方法处理二进制文件,因为用这种方法可以在文件中存储所有的字符

EOF:在C语言中,用getchar()读取文件检测到文件结尾时将返回一个特殊的值,即EOF。scanf函数检测到文件结尾时也返回EOF。

EOF定义在stdin.h文件中

#define EOF (-1)

关于为什么要定位为-1,因为getchar()函数的返回值通产都介于0~127(因为getchar()只用于处理字符,而char就是八个字节,为0~255,而ANCII码一般只用0~127)这些值对应标准字符集。所以这种情况下 -1 都不对应任何字符。

这里变量ch为int类型,因为char类型的变量只能表示0~255的无符号整数,但是EOF的值是-1.还好,getchar()函数世界返回值的类型是int,所以它可以读取EOF字符,如果实现使用有符号的char裂隙,也可以把ch声明为char类型(char就算signed char是有符号字符类型),但最好还是用更加通用的形式。但是由于getchar()函数的返回类型是int,如果把getchar()的返回值给char类型的变量,一些编译器会警告可能丢失数据。

二.不同的操作系统,文件结束方式

在UNIX和Linux系统中,在一行开始处按下Ctrl+D来传递文件结束型号。

而windows一半在一行开始处或任意位置的Ctrl+Z解释成文件结尾信号。我的属于前者。

这里不是在开头的Ctrl+Z被解释为ASCII码为26的不可打印的替换字符

在开头的Ctrl+z就能正常识别到文件结束字符

3.使用scanf检测EOF

scanf在遇到错误和文件结尾时会返回-1

这里再两行Ctrl+z才可以正常检测到文件结尾。

scanf无法读取\n,所以需要先去除\n,在读取开头ctrl z才能结束



好了朋友们我们今天的内容到这就结束了,今天的内容到这里就结束了,如果有啥不会的朋友记得论坛里面提问哈~

如果朋友你感觉文章的内容对你有帮助,可以点赞关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈

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

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

相关文章

【C++之容器适配器】栈和队列模拟实现

目录前言一、栈(stack)1. 基本代码结构2. 简介3. 成员类型4. 成员函数1. 构造函数2. empty()3. size()4. top()5. push()6.pop()7. 综合测试实现的stack的所有函数接口二、队列(queue)1. 基本代码结构2. 队列的简介3. 成员类型4. 成员函数1. 构造函数2. empty()3. size()4. fro…

leaflet 上传KML文件,导出geojson文件(065)

第065个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中本地上传kml文件,利用解析此kml文件,在地图上显示图形。点击导出geojson,将下载为geojson文件。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代…

ChatGPT 怎么用最新详细教程-新手小白一看就会

ChatGPT 以其强大的信息整合和对话能力惊艳了全球,在自然语言处理上面表现出了惊人的能力。这么强大的工具我们都想体验一下,那么 ChatGPT 怎么用呢?本文将给你逐步详细介绍。使用 ChatGPT 主要有4步:注册 ChatGPT 账号通过短信接…

vue 开发环境 卸载node 版本 切换新的 node 版本 mac电脑

注意:操作的机器当前是mac,先卸载,再安装 1.查看现有 node 版本 node -v2.卸载现有 node 版本, 1.卸载从node官网下载pkg安装的node sudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node…

地址空间 (Address Space)

文章目录:程序地址空间进程地址空间程序地址空间 什么是地址空间:地址空间是内存中可供程序或进程使用的有效地址的范围。也就是说,它是程序或进程可以访问的内存。内存可以是物理的、也可以是虚拟的,用于执行指令和存储数据。 …

nginx开启Gzip压缩,Vue性能优化之使用gzip压缩打包

一、前言不管是vue项目还是react项目在使用webpack打包之后都会生成一个动辄一两兆甚至更大的js文件,在某些情况下严重影响项目性能,打开页面的时候白屏时间会很长,本文将介绍如何使用gzip压缩打包,主要是nginx部署的配置&#xf…

hadoop环境新手安装教程

1、资源准备: (1)jdk安装包:我的是1.8.0_202 (2)hadoop安装包:我的是hadoop-3.3.1 注意这里不要下载成下面这个安装包了,我就一开始下载错了 错误示例: 2、主机网络相…

天荒地老修仙功-第六部:Spring Cloud中7中负载均衡策略

文章目录前言Ribbon介绍负载均衡设置七种负载均衡策略1、轮询策略2、权重策略3、随机策略4、最小链接数策略5、重试策略6、可用性敏感策略7、区域敏感策略总结前言 负载均衡器通常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器&…

线程池的常见知识点总结

文章目录1. 什么是线程池2. 为什么使用线程池3. 线程的作用4. 如何创建线程池5. 线程持底层是如何实现复用的6. 手写一个简易的线程池7. ThreadPoolExecutor构造函数原理8. 线程池创建的线程会一直运行下去吗?9. 线程池队列满了任务会丢失吗?分析情况有界…

xilinx srio ip学习笔记之axistream接口

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 xilinx srio ip学习笔记之axistream接口前言接口转化前言 srio 的IQ接口都是基于axistream的,以前没怎么用过axistream的接口,或者说没怎么用过复杂条…

C语言--数据的存储2

目录前言练习有符号类型与无符号类型char类型的取值范围有符号char无符号char有符号与无符号类型混合运算有符号无符号类型形成的bugchar类型取值范围应用浮点型在内存中的存储浮点数的存储浮点数存储规则浮点数取出规则前言 上篇文章我们讲解了数据类型,类型的基本…

招标采购流程的电子招标采购,是管理复杂供应链和多层供应商的高效方式。

负载均衡(Load Balance) 由于目前现有网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器设备根本无法承担。在此情况下,如果扔掉现有设…

(二)、安装uview及配置项中的易错项【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】

1.打开hbuilder软件,新建uniapp项目 2.关联unicloud服务空间 2.1 项目文件夹鼠标右键,打开uicloud web控制台 2.2 注册HBuilder 账号 dcloud账号注册链接 2.3 新建服务空间 大约等待2分钟,服务空间初始化完毕!就可以使用了。 …

每天10个前端小知识 【Day 15】

前端面试基础知识题 1.两个同级的相邻元素之间,有看不见的空白间隔,是什么原因引起的?有什么解决办法? 行框的排列会受到中间空白(回车空格)等的影响,因为空格也属于字符,这些空白也会被应用样…

Mob研究院联合明源地产研究院发布《2022年商业地产发展白皮书》

Mob研究院近日联合明源地产研究院共同发布《2022年商业地产发展白皮书》,报告从行业现状、企业概况、新兴业态和未来展望四个方面对商业地产行业进行了全景扫描,深入分析了由于疫情的影响以及消费人群和习惯的改变,2022年商业地产行业中所发生…

Ubuntu 22.04安装搜狗输入法

Ubuntu 22.04安装搜狗输入法 ubtuntu 22.04安装搜狗输入法 1. 添加中文语言支持2. 安装fcitx输入法框架3. 设置fcitx为系统输入法4. 设置fcitx开机启动,并卸载ibus输入法框架5. 安装搜狗输入法6. 重启电脑,调出搜狗输入法 1. 添加中文语言支持 Setti…

营销自动化的CRM系统能够解决哪些问题

CRM客户管理系统营销自动化的范围远远超出了人们的认知。许多人认为它只是自动化完成重复和乏味的任务来减少营销人员的工作量。虽然这确实占了很大一部分,但它真正的价值在于提高潜客转化,增加业务收入。那么,什么是CRM系统营销自动化&#…

【23种设计模式】行为型模式详细介绍(上)

前言 本文为 【23种设计模式】行为型模式 相关内容介绍,下边将对访问者模式,模板模式,策略模式,状态模式,观察者模式,备忘录模式,中介者模式,迭代器模式,解释器模式&…

实现一个简单的Database10(译文)

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者: 花家舍文章来源:GreatSQL社区原创 前文回顾 实现一个简单的Database系列 译注:csta…

测试用例设计工作中的应用

1. 等价类划分 常见的软件测试面试题划分等价类: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为假设干等价类,在每一个等价类中取一…