C++程序设计课件:第7章 输入输出流
合集下载
《输入/输出》课件

制作课件,包括文字、图片、视频等元素 测试课件,确保内容准确无误 修改和完善课件,提高课件质量
输入输出课件使用
04
技巧
使用方法
打开PPT课件,点击“开始”菜单, 选择“新建幻灯片”。
在幻灯片中,点击“插入”菜单, 选择“文本框”,输入标题和内容。
使用“格式”菜单,设置文本框的 字体、大小、颜色等。
01
输入输出课件介绍
课件背景
输入输出PPT课件是针对计算机科学领域的教学课件 主要内容包括输入输出设备的工作原理、分类和应用 适用于计算机科学、电子工程等相关专业的学生和教师 旨在帮助学生理解输入输出设备的工作基本概念和分类 讲解输入输出设备的工作原理和特点 演示输入输出设备的使用方法和注意事项 提高学生对输入输出设备的理解和应用能力
教师:用于课堂 教学,提高教学 质量
学生:用于自学, 提高学习效率
培训师:用于企 业培训,提高员 工技能
自学者:用于自 我提升,拓宽知 识面
02
输入输出课件内容
输入输出概念
输入:从外部获取信息,如键盘、鼠标、触摸屏等 输出:将处理后的信息输出到外部设备,如显示器、打印机等 输入输出设备:键盘、鼠标、显示器、打印机等 输入输出接口:USB、HDMI、VGA等
使用“插入”菜单,选择“图片”、 “图表”等元素,丰富课件内容。
使用“动画”菜单,为幻灯片添加 动画效果。
使用“幻灯片放映”菜单,预览课 件效果,调整播放顺序。
使用场景
教学演示:教师 在课堂教学中使 用,帮助学生理 解输入输出概念
培训讲座:企业 培训中使用,提 高员工工作效率
学术交流:学术 会议上使用,展 示研究成果
未来发展趋势
智能化:AI技术在输入输出领域的应用将越来越广泛,如语音识别、图像识别等
c语言——数据的输入与输出PPT教学课件

C语言程序设计
第四章
数据的输入和输出
共 25 页 第 1 页
本章要点
• 掌握C语言中输入输出数 据的方法
• 掌握各种格式的使用
共 25 页 第 2 页
数据输入输出的概念
输出:从计算机向显示器、打印机等外部设 备输出数据。
输入:从标准输入设备键盘、鼠标等向计算 机输入数据。
C语言不提供输入输出语句,输入输出操作 是由C函数库中的函数实现。
共 25 页 第 12 页
(7) f格式符 以小数形式输出实数(包括单、双精度)。
1) %f , 不指定字段宽度,由系统自动指定,使整数部 分全部输出,并输出6位小数(输出双精度数据, 也是6位,但误差降低)。
2) %m.nf , 指定输出的数据共占m列,其中有n位小 数.若数据长度小于m,则左端补空格。
printf(“%d,%o”,a,a);
输出:
VC++下
-1,177777
共 25 页 第 9 页
(3) x格式符,以十六进制数形式输出整数。 (4) u格式符,以十进制形式输出无符号型数据。 [例]
#include <stdio.h> main() {
unsigned int a=65535; int b=-2; printf(“a=%d,%o,%x,%u\n”,a,a,a,a); printf(“b=%d,%o,%x,%u\n”,b,b,b,b); } 输出: a=-1,177777,ffff,65535 b=-2,177776,fffe,65534
使用系统库函数时,要用预编译命令 “#include”将有关头文件包括在用户的源 文件中。如#include “stdio.h”
共 25 页 第 3 页
第四章
数据的输入和输出
共 25 页 第 1 页
本章要点
• 掌握C语言中输入输出数 据的方法
• 掌握各种格式的使用
共 25 页 第 2 页
数据输入输出的概念
输出:从计算机向显示器、打印机等外部设 备输出数据。
输入:从标准输入设备键盘、鼠标等向计算 机输入数据。
C语言不提供输入输出语句,输入输出操作 是由C函数库中的函数实现。
共 25 页 第 12 页
(7) f格式符 以小数形式输出实数(包括单、双精度)。
1) %f , 不指定字段宽度,由系统自动指定,使整数部 分全部输出,并输出6位小数(输出双精度数据, 也是6位,但误差降低)。
2) %m.nf , 指定输出的数据共占m列,其中有n位小 数.若数据长度小于m,则左端补空格。
printf(“%d,%o”,a,a);
输出:
VC++下
-1,177777
共 25 页 第 9 页
(3) x格式符,以十六进制数形式输出整数。 (4) u格式符,以十进制形式输出无符号型数据。 [例]
#include <stdio.h> main() {
unsigned int a=65535; int b=-2; printf(“a=%d,%o,%x,%u\n”,a,a,a,a); printf(“b=%d,%o,%x,%u\n”,b,b,b,b); } 输出: a=-1,177777,ffff,65535 b=-2,177776,fffe,65534
使用系统库函数时,要用预编译命令 “#include”将有关头文件包括在用户的源 文件中。如#include “stdio.h”
共 25 页 第 3 页
C++程序设计课件:第7章 输入输出流

或输入:a <Enter> b <Enter> c <Enter>
在上述情况下, 三个变量c1、c2和c3获得值均为 ‘a’、‘b’ 和 ‘c’。
应注意,最后输入的总是回车键。
又如:char s1[20], s2[20]; cin>>s1>>s2;
输入ab<Space>cd<Enter> 或输入ab<Tab>cd<Enter> 或输入ab<Enter>cd<Enter>
}
输出结果: abc comoperator
例7.14 输入成员函数的使用
#include <iostream.h>
#include <string.h>
void main( )
{
char buf[20], max[20];
int cnum, mc=0;
while(cin.getline(buf, 20))
{ double x;
cout<<"Please input x:";
//A
cin>>x;
if(x<0)
{ cerr<<x<<" is not a positive number!\n"; //B
return;
}
clog<<"The root of "<<x<<" is "<<sqrt(x)<<endl; //C
输入数据的类型必须与提取数据的变量类型一致。
在上述情况下, 三个变量c1、c2和c3获得值均为 ‘a’、‘b’ 和 ‘c’。
应注意,最后输入的总是回车键。
又如:char s1[20], s2[20]; cin>>s1>>s2;
输入ab<Space>cd<Enter> 或输入ab<Tab>cd<Enter> 或输入ab<Enter>cd<Enter>
}
输出结果: abc comoperator
例7.14 输入成员函数的使用
#include <iostream.h>
#include <string.h>
void main( )
{
char buf[20], max[20];
int cnum, mc=0;
while(cin.getline(buf, 20))
{ double x;
cout<<"Please input x:";
//A
cin>>x;
if(x<0)
{ cerr<<x<<" is not a positive number!\n"; //B
return;
}
clog<<"The root of "<<x<<" is "<<sqrt(x)<<endl; //C
输入数据的类型必须与提取数据的变量类型一致。
西安电子科技大学_计算机组成原理第7章输入输出IO系统_课件PPT

9
7.2 外部设备:习题
设一个磁盘盘面共有200个磁道,盘面总存储容量 60MB,磁盘旋转一周的时间为25ms,每磁道有8个扇 区,各扇区间有一间隙,磁头通过每个间隙需1.25ms。 则磁盘通道所需最大传输率是_____。
A. 10MB/s
B. 60MB/s
C. 83.3MB/s D. 20MB/s
14
7.3 I/O接口(I/O控制器):习题
在统一编址的情况下,就I/O设备而言,其对应的I/O 地址说法错误的是_____。 A. 要求固定在地址高端 B. 要求固定在地址低端 C. 要求相对固定在地址的某部分 D. 可以随意在地址的任何地方
7 第 章 输入输出(I/O)系统
7.4 I/O方式
2021年9月3日 21:40:22
7.4 I/O方式
程序查询方式 实现简单;CPU与I/O设备只能串行工作。
程序中断方式 中断的基本类型 按中断源的位置: 内中断 外中断 如何得到中断服务程序的入口地址: 向量中断: 由中断事件自己提供(硬件向量法) 非向量中断:由CPU查询得到(软件查询法)
19
7.4 I/O方式
程序中断方式
中断的过程:
中断请求:由中断源发出
中断响应:每条指令执行阶段结束前,未屏蔽
断点保护(硬件完成) 中断判优
PUSH PSW 关中断: IF=0; TF=0
中断源识别
PUSH CS
获得中断服务程序首地址 PUSH IP
中断处理
PUSH regs STI (选) 中断处理
一台字符显示器的VRAM中存放的是_____。
A. 显示字符的ASCII码
B. BCD码
C. 字模
D. 汉字内码
7.2 外部设备:习题
设一个磁盘盘面共有200个磁道,盘面总存储容量 60MB,磁盘旋转一周的时间为25ms,每磁道有8个扇 区,各扇区间有一间隙,磁头通过每个间隙需1.25ms。 则磁盘通道所需最大传输率是_____。
A. 10MB/s
B. 60MB/s
C. 83.3MB/s D. 20MB/s
14
7.3 I/O接口(I/O控制器):习题
在统一编址的情况下,就I/O设备而言,其对应的I/O 地址说法错误的是_____。 A. 要求固定在地址高端 B. 要求固定在地址低端 C. 要求相对固定在地址的某部分 D. 可以随意在地址的任何地方
7 第 章 输入输出(I/O)系统
7.4 I/O方式
2021年9月3日 21:40:22
7.4 I/O方式
程序查询方式 实现简单;CPU与I/O设备只能串行工作。
程序中断方式 中断的基本类型 按中断源的位置: 内中断 外中断 如何得到中断服务程序的入口地址: 向量中断: 由中断事件自己提供(硬件向量法) 非向量中断:由CPU查询得到(软件查询法)
19
7.4 I/O方式
程序中断方式
中断的过程:
中断请求:由中断源发出
中断响应:每条指令执行阶段结束前,未屏蔽
断点保护(硬件完成) 中断判优
PUSH PSW 关中断: IF=0; TF=0
中断源识别
PUSH CS
获得中断服务程序首地址 PUSH IP
中断处理
PUSH regs STI (选) 中断处理
一台字符显示器的VRAM中存放的是_____。
A. 显示字符的ASCII码
B. BCD码
C. 字模
D. 汉字内码
关于C语言的“输入输出”内容的详细介绍资料

scanf(“%3.2f ”,a)
注意事项
输入的数据多于数据项时,多于的数据自动作废。
#include<stdio.h> void main() {
int x,y; scanf("%2d%3d",&x,&y); printf("%d\n%d\n",x,y); }
输入:12345678 得到:
* 什么意思?
x,X
十六进制无符号整数
o
八进制无符号整数
u
不带符号十进制整数
c
单一字符
s
字符串
e,E
指数形式浮点小数
f
小数形式浮点小数
g
e和f中较短一种
%% 百分号本身
int a=567;printf ( “%d”,a); int a=255;printf(“%x”,a); int a=65;printf(“%o”,a); int a=567;printf(“%u”,a); char a=65;printf(“%c”,a); printf(“%s”,“ABC”); float a=567.789;printf(“%e”,a); float a=567.789;printf(“%f”,a); float a=567.789;printf(“%g”,a); printf(“%%”);
输入项不能确定小数位,输出可以有
#include<stdio.h> void main() {
int x; float y; scanf("%d%f",&x,&y); printf("%d\n%.2f\n",x,y); }
输入:123.456 得到:
注意事项
输入的数据多于数据项时,多于的数据自动作废。
#include<stdio.h> void main() {
int x,y; scanf("%2d%3d",&x,&y); printf("%d\n%d\n",x,y); }
输入:12345678 得到:
* 什么意思?
x,X
十六进制无符号整数
o
八进制无符号整数
u
不带符号十进制整数
c
单一字符
s
字符串
e,E
指数形式浮点小数
f
小数形式浮点小数
g
e和f中较短一种
%% 百分号本身
int a=567;printf ( “%d”,a); int a=255;printf(“%x”,a); int a=65;printf(“%o”,a); int a=567;printf(“%u”,a); char a=65;printf(“%c”,a); printf(“%s”,“ABC”); float a=567.789;printf(“%e”,a); float a=567.789;printf(“%f”,a); float a=567.789;printf(“%g”,a); printf(“%%”);
输入项不能确定小数位,输出可以有
#include<stdio.h> void main() {
int x; float y; scanf("%d%f",&x,&y); printf("%d\n%.2f\n",x,y); }
输入:123.456 得到:
第7章 输入输出系统与接口

计算机通过输入设备获取来自外部的信息。 计算机通过输出设备把处理结果显示出来。
第2页
2013年8月1日星期四
第7章
输入输出系统及接口
7.1 接口电路概述 7.1.1 接口基本概念
输入设备:输入信息 输出设备:送出结果 输入设备
各设备的组成 结构、电气性 能和工作原理 各不相同
键盘、鼠标、扫描仪、磁带机、磁盘机、光盘机、 解调器、A/D转换器 输出设备 显示器、打印机、绘图仪、磁带机、磁盘机、光盘 机、调制器、D/A转换器
第8页 2013年8月1日星期四
第7章
输入输出系统及接口
7.1.3 接口信号
与计算机交换的信息 数据信息、状态信息和控制信息 。 1.数据信息
数字量 、模拟量 、开关量 2.状态信息
外设发送给计算机,反映外设工作状态 有BUSY和READY
3.控制信息 计算机发送给外设,控制外设的工作
第24页 2013年8月1日星期四
2.输出指令
第7章
输入输出系统及接口
7.3 输入输出的数据传送方式
计算机与I/O接口间的数据传送即数据交换。 数据传送的控制方式 程序直接控制传送方式、中断方式、DMA方式和 I/O处理机方式
7.3.1 程序直接控制传送方式
定义:是指在程序控制下进行的数据传送,通常是 在用户程序中安排一段由I/O指令和其它指令组成的 程序段,直接控制I/O接口的输入/输出操作。
目标寄存器为AX时,读取16位数据 直接寻址 端口地址n只能为8位地址信号,最多可以访问 28=256个不同的端口。对应指令有: IN AL, n ;AL←(n) IN AX, n ;AX←(n)
第23页 2013年8月1日星期四
OOP 07章 流式输入输出及文件处理

7.3 Java的字节流处理
• Java字节流处理类集
7.3.1 字节输入流InputStream InputStream抽象类从输入设备或文件中读 取数据使用的字节流 提供下面几个用于读取数据的成员方法:
read() read(byte[] buffer) read(byte buffer[], int offset, int length) skip(long n) close()
2. 检测File对象
File类提供了一整套应用于File对象的成员方法。 exists() 检测File对象所描述的文件或目录是否存 在。 isDirectory() 检测File对象所描述的是否为目录。 isFile() 检测File对象所描述的是否为文件。 isHidden() 检测File对象所描述的是否为一个隐藏 文件。 canRead() 检测File对象所描述的文件是否可读。 canWrite() 检测File对象所描述的文件是否可写。 equals(Object obj) 检测File对象描述的绝对路径 与obj的绝对路径是否相等。
程序ቤተ መጻሕፍቲ ባይዱ
数据
输出设备
数据源
数据目标
当试图将外部的数据输入到程序中时,流中的 数据源是输入设备,数据目标是程序,这个流 被称为输入流(input stream)。
输入设备
数据源
数据
程序
数据目标
用流机制处理I/O的主要好处是:程序
中有关I/O的代码与设备无关,
程序不需知道(/处理)每一种设备的细 节,使程序能够适应各种设备的输入 输出。
从标准输入流读取数据
System.in是原始InputStream对象,需要经过包装才能有效地 读取数据。常用的方法: Import java.io.*; public class TypeInString{ public static void main(String[] args){ BuferedReader in = new Buffered Reader( new InputStreamReader( System.in ) ); String s;
输入和输出处理PPT课件

• 1. 生成流对象 • 2. 读入/写出字符
第8页/共23页
FileReader和FileWriter类 由于InputStreamReader和OutputStreamWriter字符流类在创建
流类的对象时必须以一个字节流作为原始的数据流来打开文件。为了能够 直接将一个具体的文件名的文件直接转换为字符流类的对象,在java.io 包中还为程序员提供了InputStreamReader和OutputStreamWriter字 符 流 类 的 两 个 子 类 F i l e Re a d e r 和 F i l e W r i t e r.
第13页/共23页
FileInputStream类
• 下列3种方法可创建FileInputStream对象: FileInputStream(File file) FileInputStream(FileDescription fdObj) FileInputStream(String name) • 在读文件时有几个必要流程如下: 使用文件输入流读取文件夹 处理I/O异常 从输入流中读取字节 关闭流
• 2. 读入和写出字符 • 3. 获取当前编码方式 • 4. 关闭流
第7页/共23页
BufferedReader和BufferedWriter • 为提高字符流的处理效率,可以采用缓冲机制。JDK引入了 BufferedReader和BufferedWriter类,用来对字符流进行成批的处理。 其中的方法readLine()是读出一行字符,而newLine()则是写入一行字符, 由于提供缓冲机制,把任意的输入流或输出流“捆绑”到缓冲流上将获得 性能的提高,同时也可以在创建缓冲流对象进设置缓冲区的大小。
第21页/共23页
串行化的注意事项
第8页/共23页
FileReader和FileWriter类 由于InputStreamReader和OutputStreamWriter字符流类在创建
流类的对象时必须以一个字节流作为原始的数据流来打开文件。为了能够 直接将一个具体的文件名的文件直接转换为字符流类的对象,在java.io 包中还为程序员提供了InputStreamReader和OutputStreamWriter字 符 流 类 的 两 个 子 类 F i l e Re a d e r 和 F i l e W r i t e r.
第13页/共23页
FileInputStream类
• 下列3种方法可创建FileInputStream对象: FileInputStream(File file) FileInputStream(FileDescription fdObj) FileInputStream(String name) • 在读文件时有几个必要流程如下: 使用文件输入流读取文件夹 处理I/O异常 从输入流中读取字节 关闭流
• 2. 读入和写出字符 • 3. 获取当前编码方式 • 4. 关闭流
第7页/共23页
BufferedReader和BufferedWriter • 为提高字符流的处理效率,可以采用缓冲机制。JDK引入了 BufferedReader和BufferedWriter类,用来对字符流进行成批的处理。 其中的方法readLine()是读出一行字符,而newLine()则是写入一行字符, 由于提供缓冲机制,把任意的输入流或输出流“捆绑”到缓冲流上将获得 性能的提高,同时也可以在创建缓冲流对象进设置缓冲区的大小。
第21页/共23页
串行化的注意事项
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
输入数据的类型必须与提取数据的变量类型一致。
输入数据时,在缺省的情况下,数据之间的分隔符为:
<Space>键(空格键)、<Tab>键(制表键)或 <Enter>键(回车键),这三个键通称为空白字符。
如:char c1, c2, c3; cin>>c1>>c2>>c3; 程序运行时, 可输入:a<Space>b<Tab>c<Enter> 也可输入:ab <Tab> c <Enter>
同理在ostream类中重载了 << 运算符
编译器会将 cout<<x<<y; 解释成 (cout.operator<<(x)) .operator<<(y);
返回 cout
例 使用cout、cerr和clog
#include <iostream.h>
#include <math.h>
void mห้องสมุดไป่ตู้in( )
输入/输出流
输入/输出流层次 终端输入/输出 文件读写
流的基本概念
流 ----- 数据在程序和设备之间“流动”
逻辑 设备
输入流 数据
内部 程序
输出流 数据
逻辑 设备
流的基本概念
▪ 流 - 可以看作一个无限长的二进制数字序列
~ 1 01 0 11 10 ~
▪ 通过读写指针进行流的读和写(以字节为单位)
…… }; extern istream cin; ……
编译器会将 cin>>x>>y; 解释成 (cin.operator>>(x)) .operator>>(y);
返回 cin
▪ I/O流
➢ C++的输入/输出操作由标准I/O库实现,通常 称为I/O流
➢ I/O流是一个利用模板、多继承和虚继承实现的 类层次结构,用它可以进行内置数据类型的终 端(控制台)、文件和内存输入/输出操作
缓冲
内 逻辑 存 设备 缓
输入流 数据
内部 程序
输出流 内
数据
存 缓
逻辑 设备
冲
冲
区
区
引入缓冲的目的是解决CPU的运行速度和外设操作速度 不匹配的矛盾。如输出时先写入缓冲区,再成批输出。 成批写出数据比一个一个写出数据节约时间。
一般地,缓冲区在内存中。
缓冲区刷新
▪ 向输出流中写数据时,通常是先向缓冲区 中写,当缓冲区写满时,才真正向输出流 写;也可以通过函数在程序中主动将缓冲 区内容写入输出流。
同理: C++还定义了三个输出流对象 cout、cerr 和 clog。 这三个对象均是ostream_withassign类的对象, 它们均在头文件ostream.h中被定义
• cin 标准输入流(输入设备是键盘) • cout 标准输出流(输出设备是显示器) • cerr 标准错误输出流,没有缓冲,立刻输出。 • clog 输出日志信息,有缓冲,缓冲区满后被输出。
~ 1 01 0 11 10 ~
将y的值写入流
y11100010
将流上的数据读进变量x
x 10101110
流的基本概念
▪ 输出流 可以看作一端无限,另一端通过写指
针不停地向后写入新内容的单向流,
~ 110 0 0 1 1 0 1 0
写指针
流的基本概念
▪ 输入流 可以看作一端无限,另一端通过读指针
基本输入输出流类体系
流基类
抽象缓冲区基类
C++预定义了流类,用于完成数据的“流动”(输入输出)
通用输入流基类 ios
streambuf
istream给出在了这若些o干s已tr方定ea法义m(的成类员中函,数通)用,输出流基类
用于控制输入输出。
iostream
通用输入输出流类基类
使用上述流类,必须包含头文件 “ iostream”
{ double x;
cout<<"Please input x:";
//A
cin>>x;
if(x<0)
{ cerr<<x<<" is not a positive number!\n"; //B
return;
}
clog<<"The root of "<<x<<" is "<<sqrt(x)<<endl; //C
用运算符重载实现标准设备的输入输出
观察头文件istream.h :
class istream : virtual public ios {
public:
……
将右移位运算符 >> 重载为 提取 运算符
istream& operator>>(char *); //A 字符串输入重载函数
……
istream& operator>>(char &); //B 字符输入重载函数
……
istream& operator>>(int &); //C 整数输入重载函数
……
istream& operator>>(double &); //D 实型数据输入重载函数
……
}; C++ 对基本的数据类型,均定义了重载运算符 >>
…… class istream_withassign : public istream {
不停地从流中读取新内容的单向流,读出 的内容从流中删去。
~ 110 0 0 1 1 0 1 0
读指针
有格式读写和无格式读写 字符方式/二进制方式读写
▪ 有格式读写,以某种数据类型为单位读写 ➢例如:读一个整数,写一个浮点数等;
▪ 无格式读写,以字节为单位读写,不区分 其中的内容 ➢例如:读20个字节,写50个字节等;
▪ iostream库预定义了一些标准流对象: ➢ cin:istream类对象,代表标准输入,用于从用户终 端读入数据
➢ cout:ostream类对象,代表标准输出,用于向用户 终端写数据
➢ cerr:ostream类对象,代表标准错误输出,用于输出 错误消息
▪ 标准流的默认输入/输出设备是控制台(console)终端
}
在本例中,cout、cerr和clog的作用相同。
而cerr和clog的区别在于,cerr是非缓冲输出,
而clog是缓冲输出。请看例14.3:
缺省的输入输出格式 1.缺省的(默认的)输入格式
cin 是缓冲流,当输入一行结束按回车(Enter)时,
操作系统将输入内容放入输入缓冲区, 然后 cin 从输入缓冲区提取数据。
➢ 类的设计者也可以扩展I/O流类层次,来处理自 定义类型数据的输入和输出
▪ 终端输入输出 ➢ 终端输入操作由输入流istream提供 ➢ 终端输出操作由输出流ostream提供 ➢ iostream是同时从istream和ostream派生的类, 允许双向的输入/输出 ➢ 为了使用输入/输出操作,需要包含头文件 <iostream>
输入数据时,在缺省的情况下,数据之间的分隔符为:
<Space>键(空格键)、<Tab>键(制表键)或 <Enter>键(回车键),这三个键通称为空白字符。
如:char c1, c2, c3; cin>>c1>>c2>>c3; 程序运行时, 可输入:a<Space>b<Tab>c<Enter> 也可输入:ab <Tab> c <Enter>
同理在ostream类中重载了 << 运算符
编译器会将 cout<<x<<y; 解释成 (cout.operator<<(x)) .operator<<(y);
返回 cout
例 使用cout、cerr和clog
#include <iostream.h>
#include <math.h>
void mห้องสมุดไป่ตู้in( )
输入/输出流
输入/输出流层次 终端输入/输出 文件读写
流的基本概念
流 ----- 数据在程序和设备之间“流动”
逻辑 设备
输入流 数据
内部 程序
输出流 数据
逻辑 设备
流的基本概念
▪ 流 - 可以看作一个无限长的二进制数字序列
~ 1 01 0 11 10 ~
▪ 通过读写指针进行流的读和写(以字节为单位)
…… }; extern istream cin; ……
编译器会将 cin>>x>>y; 解释成 (cin.operator>>(x)) .operator>>(y);
返回 cin
▪ I/O流
➢ C++的输入/输出操作由标准I/O库实现,通常 称为I/O流
➢ I/O流是一个利用模板、多继承和虚继承实现的 类层次结构,用它可以进行内置数据类型的终 端(控制台)、文件和内存输入/输出操作
缓冲
内 逻辑 存 设备 缓
输入流 数据
内部 程序
输出流 内
数据
存 缓
逻辑 设备
冲
冲
区
区
引入缓冲的目的是解决CPU的运行速度和外设操作速度 不匹配的矛盾。如输出时先写入缓冲区,再成批输出。 成批写出数据比一个一个写出数据节约时间。
一般地,缓冲区在内存中。
缓冲区刷新
▪ 向输出流中写数据时,通常是先向缓冲区 中写,当缓冲区写满时,才真正向输出流 写;也可以通过函数在程序中主动将缓冲 区内容写入输出流。
同理: C++还定义了三个输出流对象 cout、cerr 和 clog。 这三个对象均是ostream_withassign类的对象, 它们均在头文件ostream.h中被定义
• cin 标准输入流(输入设备是键盘) • cout 标准输出流(输出设备是显示器) • cerr 标准错误输出流,没有缓冲,立刻输出。 • clog 输出日志信息,有缓冲,缓冲区满后被输出。
~ 1 01 0 11 10 ~
将y的值写入流
y11100010
将流上的数据读进变量x
x 10101110
流的基本概念
▪ 输出流 可以看作一端无限,另一端通过写指
针不停地向后写入新内容的单向流,
~ 110 0 0 1 1 0 1 0
写指针
流的基本概念
▪ 输入流 可以看作一端无限,另一端通过读指针
基本输入输出流类体系
流基类
抽象缓冲区基类
C++预定义了流类,用于完成数据的“流动”(输入输出)
通用输入流基类 ios
streambuf
istream给出在了这若些o干s已tr方定ea法义m(的成类员中函,数通)用,输出流基类
用于控制输入输出。
iostream
通用输入输出流类基类
使用上述流类,必须包含头文件 “ iostream”
{ double x;
cout<<"Please input x:";
//A
cin>>x;
if(x<0)
{ cerr<<x<<" is not a positive number!\n"; //B
return;
}
clog<<"The root of "<<x<<" is "<<sqrt(x)<<endl; //C
用运算符重载实现标准设备的输入输出
观察头文件istream.h :
class istream : virtual public ios {
public:
……
将右移位运算符 >> 重载为 提取 运算符
istream& operator>>(char *); //A 字符串输入重载函数
……
istream& operator>>(char &); //B 字符输入重载函数
……
istream& operator>>(int &); //C 整数输入重载函数
……
istream& operator>>(double &); //D 实型数据输入重载函数
……
}; C++ 对基本的数据类型,均定义了重载运算符 >>
…… class istream_withassign : public istream {
不停地从流中读取新内容的单向流,读出 的内容从流中删去。
~ 110 0 0 1 1 0 1 0
读指针
有格式读写和无格式读写 字符方式/二进制方式读写
▪ 有格式读写,以某种数据类型为单位读写 ➢例如:读一个整数,写一个浮点数等;
▪ 无格式读写,以字节为单位读写,不区分 其中的内容 ➢例如:读20个字节,写50个字节等;
▪ iostream库预定义了一些标准流对象: ➢ cin:istream类对象,代表标准输入,用于从用户终 端读入数据
➢ cout:ostream类对象,代表标准输出,用于向用户 终端写数据
➢ cerr:ostream类对象,代表标准错误输出,用于输出 错误消息
▪ 标准流的默认输入/输出设备是控制台(console)终端
}
在本例中,cout、cerr和clog的作用相同。
而cerr和clog的区别在于,cerr是非缓冲输出,
而clog是缓冲输出。请看例14.3:
缺省的输入输出格式 1.缺省的(默认的)输入格式
cin 是缓冲流,当输入一行结束按回车(Enter)时,
操作系统将输入内容放入输入缓冲区, 然后 cin 从输入缓冲区提取数据。
➢ 类的设计者也可以扩展I/O流类层次,来处理自 定义类型数据的输入和输出
▪ 终端输入输出 ➢ 终端输入操作由输入流istream提供 ➢ 终端输出操作由输出流ostream提供 ➢ iostream是同时从istream和ostream派生的类, 允许双向的输入/输出 ➢ 为了使用输入/输出操作,需要包含头文件 <iostream>