c++IO之标准设备操作流

每种语言系统都会提供IO操作的类库,用于对预定义类型数据进行输入输出的操作。C++也是如此,它是以字节流的形式实现的。在输入操作时,字节流从输入设备(键盘、磁盘)流向内存;在输出操作时,字节流由内存流向输出设备(显示器、打印机);字节流可以是ASCII字符、二进制数据、图形图像、音频视频等信息。文件和字符串也可以看成是有序的字节流,又称为文件流和字符串流。C++的编译系统自带一个面向对象的输入输出软件包,即IO流类库。库中各种类的声明都被包含在相应的头文件中,比如之前经常用到的头文件iostream,其中使用的cin\cout都是常用的流对象,用于对标准设备的IO操作。还有用于用户文件管理IO操作的fstream头文件(磁盘文件的操作),用于字符串流的IO操作的strstream头文件(内存字符流的操作),以及iomanip头文件用于输入输出的格式控制。

  在IO流类库中包含以下几个常用的流类:

ios是抽象基类,类istream和ostream是单继承于ios,而类iostream是通过多继承于类istream和类ostream。ios除了派生出istream和ostream还派生出fstreambase文件流类和strstreambase串流类,而该4类又派生出ifstream、ofstream、istrstream、ostrstream,以及fstream和strstream。

  在C++中除了上述提到过的预定义流对象cout和cin外,还有非缓冲标准出错流对象cerr和缓冲标准出错流对象clog,它们都是来自于ostream类的对象,用于输出错信息。cerr和clog之间的不同之处在于cerr是不经过缓冲区直接向显示器输出有关信息,而clog则是先把信息放在缓冲区,缓冲区满后或遇上endl时向显示器输出。下面介绍几个预定义对象cout和cin的几个成员函数:

cout.put(字符变量或单字符);//注:参数可以是字符的ASCII码或整型表达式

cin.get(字符型变量);//注:从输入流中读取一字符(包括空白字符)

cin.getline(字符数组,字符个数,终止标志符);

cin.getline(字符指针,字符个数,终止标志符);//注:从输入流中读取n-1个字符,赋值给字符数组或字符指针所指的字符数组,最后插入一个字符串结束标志‘\n‘。如果在读取n-1个字符之前遇到指定的终止符,则提前结束读取,最后插入一个字符串结束标志‘\n‘。

cin.ignore(n,终止符);//注:跳过输入流中n个字符(默认为1),或遇到指定终止符(默认为EOF)时提前结束。

综合上述成员函数举例:

 1 #include "stdafx.h"
 2 #include <iostream>
 3
 4 int main()
 5 {
 6     std::cout<<"cout.put:"<<std::endl;
 7     std::cout.put(‘X‘);
 8     std::cout.put(‘\n‘);
 9     std::cout.put(88);
10     std::cout.put(‘\n‘);
11
12     std::cout<<"********************************"<<std::endl;
13
14     std::cout<<"cin.get:"<<std::endl;
15 char ch;
16 while(std::cin.get(ch))
17     {
18 if(ch==‘\n‘)
19         {
20             std::cout<<std::endl;
21 break;
22         }
23         std::cout.put(ch);
24     }
25
26     std::cout<<"********************************"<<std::endl;
27
28     std::cout<<"cout.getline:"<<std::endl;
29
30 char str[10];
31     std::cin.getline(str,10,‘t‘);
32     std::cout<<str<<std::endl;
33
34     std::cout<<"********************************"<<std::endl;
35
36     std::cout<<"cout.ignore:"<<std::endl;
37     std::cin.ignore(5,‘t‘);
38     std::cin>>str;
39
40     std::cout<<str<<std::endl;
41
42 return0;
43 }
 
这里要注意ignore的使用,它后面一定跟标准输入语句,否则强制等待输入;其实ignore的作用就是对之后输入的内容进行忽略,例如 char str[10];cin.ignore(5,‘q‘);cin>>str;折句话的意思就是要求输入str,共十个字符(包括‘\0‘),但是ignore在这里就会忽略你的前5个字符(如果前五个字符内有q,那忽略q与之前的字符),所以你要输入9个字符+忽略的字符+\0

c++IO之标准设备操作流

时间: 2024-10-09 06:48:46

c++IO之标准设备操作流的相关文章

内核IO和标准IO

对于文件的读写操作函数在执行的空间来分,可以分为内核IO(主要在内核中运行)和标准IO(主要在用户空间中运行). 内核IO需要自己创建和管理缓存,而标准IO是自动分类缓存,一般来说,内核IO的效率高于标准IO,但是差距不是很大,考虑移植性,还是建议使用标准IO(只要是支持标准C语言就支持标准IO). 无论是标准IO还是内核IO都是对文件的信息,读写文件的指针进行记录的,调用相应的函数可以进行文件信息的读取和指针的修改. 以下为IO相关的函数的头文件,使用,参数,返回值的说明 linux C语言I

java之IO其它类型的流

一.操作基本数据类型的流 DataInputStream DataOutputStream 数据输出流允许应用程序以适当方式将基本java数据类型写入输出流中.然后,应用程序可以使用数据输入流将数据读入. package a; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import

标准文本流

标准文本流的三个属性 1.默认按顺序排列,若后面空间不足,文章内容会自动换行. 2.高低不一样会默认底端对齐. 3.如果想没有缝隙必须紧密连接,如果编辑代码时有多余空格网页就会有一个空格留位. 如何脱离文本流(按照html划分可叫文本级和容器级) 想让块级和行内相互转化可以使用display,display四个属性none/inline/block/inline-block 1)none 可以用于悬浮下拉菜单,为默认值,用于隐藏. 2)inline 用于把块级变成行内. 3)block 用于把行

单片机IO口标准双向,推挽,高阻,开漏模式 ,LED感应亮灭实验【原创!】

单片机IO口标准双向,推挽,高阻,开漏模式 ,LED感应亮灭实验  十一长假在家快烂了,没事儿做,DIY技术搞起来!  [关于12C增强型单片机I/O口的工作类型实验研究] 文中动画视频效果下载: STC单片机头文件[51CTO-->单片机-->LED感应亮灭实验] 下载链接 链接:http://pan.baidu.com/s/1pJKK4w7   密码:a0re  1.用强推模式,点亮一个LED  /* 工程创建MCU选取,Atmel 89C55 单片机:STC12C4052AD 晶振:无要

文件IO和标准IO

2015.2.26 星期四,阴天 今天的内容主要是文件IO man 手册的分册: man -f open 查看那些分册中有openman 1 -- 普通的命令程序man 2 -- 系统调用man 3 -- 库函数 文件:操作系统将硬件抽象成文件输入:将设备中的数据写进到内存输出:将内存中的数据写出到设备 Linux的文件系统由两层结构构成:第一层是虚拟文件系统(VFS),第二层是各种不同的具体的文件系统 posix:可移植操作系统接口规范API:用户编程接口 应用通过POSIX和GNU C LI

JavaLearning:JAVA IO 之内存操作流

package org.fun.io; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; public class ByteArrayDemo { public static void main(String[] args) { String str = "helloworld";// 定义字符串,全部由小写字母组成 ByteArrayOutputStream bos = null;//

io系列之字符流

java中io流系统庞大,知识点众多,作为小白通过五天的视频书籍学习后,总结了io系列的随笔,以便将来复习查看. 本篇为此系列随笔的第一篇:io系列之字符流. IO流 :对数据的传输流向进行操作,java中将这种操作行为本身封装为对象,以供使用. Input and Output java将io流对象都在IO包中.(java.IO.*) 分类: 按照数据种类分: 字节流 和 字符流, 按照数据流向分: 输出流 和 输入流. 字节流抽象类: InputStream OutputStream 字符流

LINUX原始IO和标准IO

linux编程中有两类IO, 一类是标准库提供的IO函数fopen, fread , fwrite. 一类是系统接口函数 read ,write等.本文说明两类IO的区别和联系. 区别: 首先看一下两类IO函数的定义: fread:     size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;      read :       ssize_t read (int fd, void *buf, size_t

Java nio 笔记:系统IO、缓冲区、流IO、socket通道

一.Java IO 和 系统 IO 不匹配 在大多数情况下,Java 应用程序并非真的受着 I/O 的束缚.操作系统并非不能快速传送数据,让 Java 有事可做:相反,是 JVM 自身在 I/O 方面效率欠佳.操作系统与 Java 基于流的 I/O模型有些不匹配.操作系统要移动的是大块数据(缓冲区),这往往是在硬件直接存储器存取(DMA)的协助下完成的.而 JVM 的 I/O 操作类喜欢操作小块数据--单个字节.几行文本.结果,操作系统送来整缓冲区的数据,java.io 包的流数据类再花大量时间