缓冲区

缓冲区分为两类:完全缓冲(fully buffered)I/O和行缓冲(line-buffered)I/O。完全缓冲在缓冲区满时被清空(内容被发送至目的地)。这种类型常出现在文件输入中。缓冲区的大小取决于系统。行缓冲在遇到换行字符时被清空。键盘输入是标准的行缓冲。

文件、流和键盘输入

c程序处理一个流而不是一个文件。键盘输入由一个被称为stdin的流表示,而到屏幕(或电子传真机、或其他输出设备)上的输出由一个被称为stdout的流表示。

文件结尾

检测文件结尾的一种方法是在文件中放置一个特殊字符来标志结尾。例如CP/M、IBM/DOC和MS/DOC的文本文件中曾使用一种方法。使用内嵌的Ctrl+Z字符来标识文件结尾。

第二种方法是让操作系统存储文件大小的信息。如果一个文件有3000字节,而且程序已经读取了3000字节,则改程序就到达了文件结尾。

对于这两种方法,c的处理方法是让getchar()在到达文件结尾时返回一个特殊值,此值名称为EOF(End Of File)。

重定向和文件

令程序和文件一同工作有两种方式。一种方式是明确的使用打开文件、关闭文件、读文件、写文件等专门函数。

第二种方式是使用一个设计用于与键盘和屏幕共同工作的程序,但是使用不同通道重定向输入和输出,例如输入到文件和从文件输出。

输入重定向

假如你编译了echo_eof.c,要运行程序,键入该程序的名字。

echo_ eof

假设你要对一个名为words的文本文件使用该程序。

echo_ eof<words

<符号是Unix、Linux重定向运算符。该运算把words文件的内容引导至echo_eof程序。

输出重定向

假如你想echo_eof将你的键盘输入发送给一个名为mywords的文件。

echo_ eof>mywords

>会建立一个新文件,然后将echo_eof的输出重定向到该文件。

组合重定向

假如你希望制作mywords的一个副本,并将其命名为savewords,只需发出命令:

echo_ eof<mywords>savewords

下面的语句同样可以实现,重定向运算符的顺序无关紧要:

echo_ eof>savewords<mywords

C学习笔记(八)字符输入输出和输入确认的更多相关文章

  1. C Primer Plus_第8章_字符输入输出和输入确认_编程练习

    1.题略 #include <stdio.h> int main(void) { ; printf("Please enter text here(end with Ctrl + ...

  2. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...

  3. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

  4. Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  5. Go语言学习笔记八: 数组

    Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...

  6. go微服务框架kratos学习笔记八 (kratos的依赖注入)

    目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...

  7. Redis学习笔记八:集群模式

    作者:Grey 原文地址:Redis学习笔记八:集群模式 前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是 ...

  8. Java IO学习笔记八:Netty入门

    作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+ ...

  9. ROS学习笔记八:基于Qt搭建ROS开发环境

    1 前言 本文介绍一种Qt下进行ROS开发的完美方案,使用的是ros-industrial的Levi-Armstrong在2015年12月开发的一个Qt插件ros_qtc_plugin,这个插件使得Q ...

随机推荐

  1. Android 高德地图No implementation found for long com.autonavi.amap.mapcore.MapCore

    此篇博客最后更新时间写自2016.5.18.当下高德地图jar版本为3.3.1. 使用高德地图碰到此问题,纠结许久(接近4个多小时). 记录在此,希望遇到相同问题的读者可以有所借鉴. 错误截图: 导致 ...

  2. lc.exe已退出代码为1

    1.把项目文件夹下Properties文件夹下的licenses.licx文件删除,重新编译即可: 2.文本方式打开*.csproj文件,在文件中查找licenses.licx字样,删除对应节点. 之 ...

  3. request.GetResponse 400错误处理方法

    问题描述:在使用request.GetResponse时,如果是400错误,将抛出异常信息,而获取不到返回内容,所以返回的内容只能在catch上面获取,转载于 http://blog.csdn.net ...

  4. 【转】HTTP 头部解释,HTTP 头部详细分析,最全HTTP头部信息

    HTTP 头部解释 ========================================================================================== ...

  5. ios-自定义alertView提示框

    先上图,弹框的背景色,按钮背景色,提示的消息的字体颜色都可以改变 利用单例实现丰富的自定义接口 // // PBAlertController.h // PBAlertDemo // // Creat ...

  6. 实现easyui datagrid在没有数据时显示相关提示内容

    本示例实现easyui datagrid加载/查询数据时,如果没有相关记录,则在datagrid中显示没有相关记录的提示信息,效果如下图所示 本实例要实现如下图所示的效果: 本示例easyui版本为1 ...

  7. Array基本操作

    // defined array object val arr0= ) val arr1= Array(") println(arr1()) arr1()="Hello Spark ...

  8. navicat----------局域网数据库:如何让navicat链接局域网其他的数据库。

    1.方法很简单了,找到被链接的数据库,打开以后有一个自带的mysql数据库,打开以后下面有一个user表,把里面的第一条数据的第一个字段改成% 百分号,然后保存,重启服务器,搞定 2.如果是linux ...

  9. 树的Prufer 编码和最小生成树计数

      Prufer数列 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2.它可以通过简单的迭代方 ...

  10. 基于android-async-http的android服务

    1:服务器端/** * Created by LiuFei on 2016/1/22. */public class HttpService extends Service{ @Override pu ...