走进C++程序世界------IO标准库介绍

流概述

流是C++标准的组成部分,流的主要目标是,将从磁盘读取文件或将输入写入控制台屏幕的问题封装起来,创建流后程序员就可以使用它,流将负责处理所有的细节。

IO类库

在C++输入?输出操作是通过C++系统提供的完成I/O操作的一组类实现的。主要包括:

标准流类:处理与标准输入设备(键盘)和输出设备(显示器)关联的数据流

文件流类:处理与磁盘文件关联的数据流

字符串流类:利用内存中的字符数组处理数据的输入输出

异常类等:处理异常错误.

标准IO对象:

包含iostream类的C++程序启动时,将创建并初始化4个对象。

1、cin :处理来自标准输入的设备(键盘)的输入。

2、cout:处理到标准输出设备(控制台屏幕)的输出

3、cerr: 处理到标准错误设备(控制台屏幕)的非缓冲输出,由于这是非缓冲的,所以发送到cerr的任何数据都被立即写入标准错误设备,而不等缓冲区填满或者刷新指令

4、clog:处理输出到标准错误设备(控制台屏幕)的缓冲错误信息。

注意:cin 在遇到空格或者换行符时标示输入结束。

/*File : cerr.cpp
 *Auth : sjin
 *Date : 20140506
 *Mail : [email protected]
 */

#include <iostream>

using namespace std;

/*格式化输出
 *输出缓冲遇到换行,有输入、满、程序结果、flush会刷新
 */

int main()
{
	char ch;
	cerr << "World    "; /*无缓冲,不可重定向*/
	cin >> ch;
	clog << "Clog    ";  /*理论上“缓冲,不可重定向”实际上无缓冲*/
	cout << "Hello    "; /*缓冲,可重定向*/

	 //输入任意字符退出
	cin >> ch;
	return 0;
}

看输出:

问题:从上面的输出结果,貌似cout也不是带缓冲的,不知道是我理解的问题,还是代码写的有错误,求解?

下面是一些基本函数的用法

/*File : get.cpp
 *Auth : sjin
 *Date : 20140506
 *Mail : [email protected]
 */

#include <iostream>

using namespace std;

int main()
{
	char ch;
	while((ch = cin.get()) != EOF ){
		if (ch == ‘$‘){
			break;
		}
		cout <<"ch = " << ch << endl;
	}

	cout << "Done" << endl;
	cin.ignore(10,‘\n‘);

	char s[25];
	cin.get(s,25);
	cout << s << endl;
	return 0;
}

输出结果:

/*File : cerr.cpp
 *Auth : sjin
 *Date : 20140506
 *Mail : [email protected]
 */

#include <iostream>
#include <string>

using namespace std;

/*i.get() 从键盘输入一个字符
 *o.put() 往屏幕输出一个字符
 *i.getline() 从键盘输入一串字符串
 *i.putback() 插入字符。
 *i.peek() //查看输入缓冲区的第一个字符
 */

void get_put()
{
	cout << "####请输入四个字符或者数字###" << endl;
	int n = cin.get();
	char c,d,e;
	cin.get(c).get(d).get(e);// istream& get(char& ch);

	cout << "n = " <<n << endl;
	cout << "c = " <<c << endl;
	cout << "d = " <<d << endl;
	cout << "e = " <<e << endl;

	cout << "另一种输出方法" <<endl;
	cout.put(n).put(c).put(d).put(e);
	//忽略前200个字符除非遇到字符‘\n‘,而停止忽略字符
	cin.ignore(200,‘\n‘);
	char ch;
	cin >> ch;
	cout << "ch = " <<ch << endl;
	cin.ignore(200,‘\n‘);
}
void mygetline()
{
	char buf[10]={‘\0‘};
	cout << "####start getline ###" <<endl;
	cout << "cin.getline 输入字符串,长度不要超过9个,‘\0‘ 10个" <<endl;
	cin.clear();

	if(!cin.getline(buf,sizeof(buf))){
		cout << "行输入过长,错误" <<endl;
		cin.clear();
		/*清除输入过长的部分,应该不会超过1000个吧!*/
		cin.ignore(1000,‘\n‘);
	}

	string s;
	cout << "使用getline 全局函数输入字符串:" <<endl;
	getline(cin,s);//getline(cin,s,‘s‘)
	cout << "buf = " << buf<<endl;
	cout << "s = " << s << endl;
	cout << "printf 输出s :" <<endl;
	printf("%s\n",s.c_str());
	cout << "####end getline ###" <<endl;
}

void mypeek()
{
	char buf[10];
	char c;

	cout << "请输入一个字符," << endl;
	cin >>ws;//屏蔽掉空格
	c = cin.get();

	cin.putback(c);
	if(cin.peek()> ‘0‘ && cin.peek() < ‘9‘){

		double d;
		cout <<"请输入一个浮点数" << endl;
		cin >> d;
		cout << "d = " << d << endl;
	}else{
		string s;
		cout <<"请输入一串字符串" << endl;
		cin >> s ;
		cout <<"s = " << s << endl;
	}

}
int main2()
{

	//get_put();

	//mygetline();

	//mypeek();
	return 0;
}

文件的输入和输出:

下面介绍打开和关闭文件的流对象, ifstream ofstream

参考资料:

1、C++ 标准IO库知识整理

走进C++程序世界------IO标准库介绍,布布扣,bubuko.com

时间: 2024-08-06 01:00:51

走进C++程序世界------IO标准库介绍的相关文章

浅谈C++ IO标准库(1)

IO流:一.C++中标准IO库:1).为面向对象的标准库.2).以继承的形式设计.     A)以iostream为基类,派生出了fstream,strigstream类.注意:fstream.stringstream没有继承关系,open.close为fstream类自有的函数操作,str为stringstream自有的函数操作,故其各函数操作不可混用,而iostream中的函数操作其两子类由于继承关系可以调用.     B) 其禁用了复制和赋值操作,故IO对象不可以复制或赋值.这将导致像ve

走进C++程序世界-----operator new delete 重载

在C++ 的世界里,new 和delete 是关键字,而在C的世界里相对应的malloc和free是函数,关键C++的new和delete分析,详见前面的章节,这里就不在过多的介绍了.链接. 下面来研究下关于new 和delete的重载. 1.对比使用重载和未使用重载 未使用" /*File : operator_new.cpp *Auth : sjin *Date : 2014-04-27 *Mail : [email protected] */ #include <iostream&g

走进C++程序世界------异常处理

一. 概述 C++自身有着非常强的纠错能力,发展到如今,已经建立了比较完善的异常处理机制.C++的异常情况无非两种,一种是语法错误,即程序中出现了错误的语句,函数,结构和类,致使编译程序无法进行.另一种是运行时发生的错误,一般与算法有关. 关于语法错误,不必多说,写代码时心细一点就可以解决.C++编译器的报错机制可以让我们轻松地解决这些错误. 第二种是运行时的错误,常见的有文件打开失败.数组下标溢出.系统内存不足等等.而一旦出现这些问题,引发算法失效.程序运行时无故停止等故障也是常有的.这就要求

标C编程笔记day07 常用标准库介绍、字符串输入处理、字符指针的使用

常用标准库: assert.h:断言,包含assert宏.可以进行自我检查 ctype.h:字符处理,字符的分类,大小转换 errno.h:错误信息处理 float.h:浮点数特性 limits.h:整数的大小,提供了描述整数类型的宏 lcale.h:本地化 math.h:数学函数 setjmp.h:跳转 signal.h:信号处理 stdarg.h:可变长参数处理 stddef.h:经常使用的类型的定义 stdio.h:输入输出 string.h:字符串处理 stdlib.h:其他函数,字符串

OSS.Social微信项目标准库介绍

经过本周的努力,昨晚终于完成OSS.Social微信项目的标准库支持,当前项目你已经可以同时在.net framework和.net core 中进行调用,调用方法也发生了部分变化,这里我简单分享下,主要包含下边几个部分: · 移植后的变化 · 和OSS.Common,OSS.Http关系 · 异步(Task)使用介绍 一. 移植后的变化 如果不了解OSS.Social的同学,可以参看我前面的几篇文章介绍,这里就不多说了.?这次移植的变化首先是对.net core项目能够提供直接的支持,当前的使

Python标准库介绍

在<Python语言参考手册>中描述了Python的语法和语义,而本手册主要介绍了Python标准库的内容和使用,也介绍了一些发行库里可选的组件库. Python标准库包含的内容是非常广泛的,通过标准库的目录长度和内容就可明白到这一点.标准库包含一些模块是使用C语言来编写的,比如访问系统I/O的文件功能,这些功能对Python开发人员来说是不能直接访问的,因此这些模块都设计成为内置模块.另外标准库也为开发人员提供那些大家经常使用的功能,这样以便成为标准的解决方案,就可以提高开发人员的开发速度和

C++的iostream标准库介绍(转自http://dev.yesky.com/420/2525920.shtml)

为什么需要iostream 我们从一开始就一直在利用C++的输入输出在做着各种练习,输入输出是由iostream库提供的,所以讨论此标准库是有必要的,它与C语言的 stdio库不同,它从一开始就是用多重继承与虚拟继承实现的面向对象的层次结构,作为一个c++的标准库组件提供给程序员使用. iostream为内置类型对象提供了输入输出支持,同时也支持文件的输入输出,类的设计者可以通过对iostream库的扩展,来支持自定义类型的输入输出操作. 为什么说要扩展才能提供支持呢?我们来一个示例. #inc

Robot framework(RF) Builti,Screenshot和Collections标准库介绍

1.1  Builti标准类库 在学习一门编程语言的时候,大多教材都是从打印“hello world”开始.我们可以像编程语言一样来学习Robot Framework.虽然通过RIDE 提供“填表”一样的写测试用例的方式.但它却有着像编程语言一样的强大的关键字,以及可以开发关键字的扩展能力. Builti标准类库包含了很多最常用的关键字,下面就逐一介绍常用关键字的使用. 3.7.1 log 关键字 log 关键字就是编程语言里的“print”一样,可以打印任何你想打印的内容. 在log关键字测试

python标准库介绍——36 popen2 模块详解

==popen2 模块== ``popen2`` 模块允许你执行外部命令, 并通过流来分别访问它的 ``stdin`` 和 ``stdout`` ( 可能还有 ``stderr`` ). 在 python 1.5.2 以及之前版本, 该模块只存在于 Unix 平台上. 2.0 后, Windows 下也实现了该函数. [Example 3-9 #eg-3-9] 展示了如何使用该模块来给字符串排序. ====Example 3-9. 使用 popen2 模块对字符串排序Module to Sort