c++中的IO流(流的概念和流类库的结构,标准的输入输出流)

流的概念和流类库的结构

程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件
c++输入输出包含以下三个方面的内容

  1. 对系统指定的标准设备的输入输出。即从键盘输入数据,输出到显示器屏幕,这种输入输出称为标准的输入输出,简称标准I/O
  2. 以外存磁盘文件为对象进行输入和输出,即从磁盘文件输入数据,数据输出到磁盘文件。以外存文件为对象的输入输出称为文件的输入输出,简称文件I/O
  3. 对内存中指定的空间进行输入和输出。通常指定一个字符数组作为存储空间(实际上可以利用该空间存储任何信息)。这种输入输出称为字符串输入输出,简称串I/O

c++编译器系统提供了用于输入输出的iostream类库,iostream这个单词是由3个部分组成,即i-o-stream,意为输入输出流。在iostream类库中包含许多用于输入输出的类。

标准的输入流

  1. cin.get缓冲区中读取一个字符

  2. cin.get(两个参数)不读换行符

  3. cin.getline()读取换行,并且扔掉

  4. cin.ignore 忽略(N)N代表忽略字符数

  5. cin.peek偷窥 偷看1个字符然后放回去

  6. cin.putback 放回 把字符放回缓冲区

     #include<iostream>
     
     using namespace std;
     
     /*
     cin.get()//一次只能读取一个字符
     cin.get(一个参数)//读一个字符
     cin.get(两个参数)//可以读字符串
     cin.getline()
     cin.ignore()
     cin.peek()
     cin.putback()
     */
     
     void test01()
     {
     	//输入as  缓冲区中有 a s 和换行 第一个拿 a 第二个拿 s 第三个拿换行,第四次等待下次输入
     
     	char c=cin.get();
     	cout << "c=" << c<<endl;
     
     	c = cin.get();
     	cout << "c=" << c << endl;
     
     	c = cin.get();
     	cout << "c=" << c << endl;
     
     	c = cin.get();
     	cout << "c=" << c << endl;
     
     
     }
     
     void test02()
     {
     	//cin.get();//可以读字符串
     		char buf[1024];
     		cin.get(buf, 1024);
     
     		char c = cin.get();
     		if (c == '\n')
     		{
     			cout << "换行还在缓冲区" << endl;
     		}
     		else
     		{
     			cout << "换行不在缓冲区" << endl;
     		}
     
     		cout << buf << endl;
     }
     //cin.get(两个参数)读取字符串时,不会把换行符拿走,遗留在缓冲区中
     
     void test03()
     {
     	char buf[1024];
     	cin.getline(buf, 1024);
     
     	char c = cin.get();
     	if (c == '\n')
     	{
     		cout << "换行还在缓冲区" << endl;
     	}
     	else
     	{
     		cout << "换行不在缓冲区" << endl;
     	}
     
     	//cin.getline把换行符读取,并且扔掉
     }
     
     void test04()
     {
     	cin.ignore(2);//没有参数代表忽略一个字符,带参数n,代表忽略n个字符
     
     	char c=cin.get();
     
     	cout << "c=" << c << endl;
     }
     
     //cin.peek()偷窥
     void test05()
     {
     	//输入as   偷看一眼a然后再放回缓冲区,缓冲区中还是as
     	char c = cin.peek();
     
     	cout << "c=" << c << endl;
     
     	c = cin.get();
     
     	cout << "c=" << c << endl;
     
     }
     
     //cin.putback()数据
     void test06()
     {
     	char c = cin.get();
     	cin.putback(c);
     
     	char buf[1024];
     	cin.getline(buf, 1024);
     	cout << buf << endl;
     }
     
     
     int main()
     {
     
     	//test01();
     	//test02();
     	//test03();
     	//test04();
     	//test05();
     	test06();
     	system("pause");
     	return 0;
     }
    

输入流案例

  1. 判断用户输入的是字符串还是数字,利用偷窥或者放回

  2. 让用户输入指定范围内的数字,如果不正确请重新输入

     //案列1  判断用户输入的是字符串,还是数组?
     void test07()
     {
     	cout << "请输入一串数字或者字符串" << endl;
     
     	//偷窥
     	char c = cin.peek();
     	if (c >= '0'&&c <= '9')
     	{
     		int num;
     		cin >> num;
     
     		cout << "您输入的是数字,数字为" << num << endl;
     	}
     	else
     	{
     		char buf[1024];
     		cin >> buf;
     		cout << "您输入的是字符串,字符串为" << buf << endl;
     	}
     }
     
     //案例2 让用户输入1到10的数字,如果输入有误,重新输入
     
     void test08()
     {
     	int num;
     
     	cout << "请输入一个1到10的数字:" << endl;
     	while (true)
     	{
     		cin >> num;
     		if (num > 0 && num <= 10)
     		{
     			cout << "输入的数字为" << num << endl;
     			break;
     		}
     		//cout << "对不起请重新输入" << endl;
     		//重置标志位
     		cin.clear();//重置标志位
     		cin.sync();//清空缓冲区
     		//cout << "标志位" << cin.fail() << endl;
     		//标志位0正常的 1不正常
     	}
     	
     }
     
     
     
     int main()
     {
     
     	//test01();
     	//test02();
     	//test03();
     	//test04();
     	//test05();
     	//test06();
     	//test07();
     	test08();
     	system("pause");
     	return 0;
     }
    

标准输出流

#include<iostream>

using namespace std;

/*
cout.put() //向缓冲区写字符
cout.write()//从buffer中写num个字节到当前输出流中
*/

void test01()
{
	//cout.put('a').put('b');

	char buf[1024] = "helloworld";

	cout.write(buf, strlen(buf));
}




int main()
{
	test01();
	system("pause");
	return 0;
}

标准输出流

#include<iostream>
#include<iomanip>//使用控制符头文件
using namespace std;

/*
cout.put() //向缓冲区写字符
cout.write()//从buffer中写num个字节到当前输出流中
*/

void test01()
{
	//cout.put('a').put('b');

	char buf[1024] = "helloworld";

	cout.write(buf, strlen(buf));
}


void test02()
{
	//通过流成员函数
	int number = 99;
	cout.width(20);
	cout.fill('*');
	cout.setf(ios::left);//输入内容做对齐
	cout.unsetf(ios::dec);//卸载十进制
	cout.setf(ios::hex);//变为16进制
	cout.setf(ios::showbase);//强制输出整数的基数 0 0x
	cout.unsetf(ios::hex);//卸载十六进制
	cout.setf(ios::oct);//变为8进制
	cout << number << endl;

}

//控制符的方式显示
void test03()
{
	int number = 99;
	cout << setw(20)
		<< setfill('^')
		<< setiosflags(ios::showbase)//基数
		<< setiosflags(ios::left)//左对齐
		<< hex //十六进制
		<< number
		<< endl;
}



int main()
{
	test03();
	system("pause");
	return 0;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
.NET Framework 4.0 常用类库参考手册 [微软官方 MSDN] MSDN Library - .NET Framework 4.0 - 命名空间 (节选版) 制作成了chm格式,方便离线状态下学习! ======================================= 原文地址:http://msdn.microsoft.com/zh-cn/library/ms229335.aspx ======================================= .NET Framework 类库 - 命名空间 (节选版) Microsoft.Win32 提供两种类型的类:处理由操作系统引发的事件的类和对系统注册表进行操作的类。 System 包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、特性和处理异常的基础类和基类。其他类提供支持下列操作的服务:数据类型转换,方法参数操作,数学计算,远程和本地程序调用,应用程序环境管理以及对托管和非托管应用程序的监管。 System.Collections 包含定义各种对象集合(如列表、队列、位数组、哈希表和字典)的接口和类。 System.Data 包含组成大部分 ADO.NET 结构的类。ADO.NET 结构使您可以生成可用于有效管理来自多个数据源的数据的组件。 System.Data.Common 包含由 .NET Framework 数据提供程序共享的类。.NET Framework 数据提供程序描述用于在托管空间访问数据源(如数据库)的类的集合。 System.Data.Linq 包含支持在 LINQ to SQL 应用程序与关系数据库进行交互的类。 System.Data.Linq.Mapping 包含用于生成表示关系数据库的结构和内容的 LINQ to SQL 对象模型的类。 System.Data.Mapping 提供用于存储数据映射信息的类型。 System.Data.Metadata.Edm 包含一组类型,这些类型表示模型由实体框架使用的概念,以及一组帮助应用程序使用元数据的类。 System.Data.Objects 包含可访问对象服务的核心功能的类。 System.Data.Objects.DataClasses 包含以下这些类:Entity Data Model (EDM) 定义的类型的基类、由导航属性返回的类型的基类,以及用于定义将公共语言运行时 (CLR) 对象映射到概念模型类型的特性的类。 System.Data.Sql 包含支持特定于 SQL Server 的功能的类。此类的 API 扩展已添加到 SQL Server 的 .NET Framework 数据提供程序 ( System.Data.SqlClient) 。 System.Data.SqlClient 包含封装 SQL Server .NET Framework 数据提供程序的类。SQL Server .NET Framework 数据提供程序描述了用于在托管空间访问 SQL Server 数据库的类集合。 System.IO 包含允许对数据和文件进行同步和异步读写的类型。 System.Linq 包含支持使用语言集成查询 (LINQ) 的查询的类和接口。 System.Web 提供启用浏览器/服务器通信的类和接口。 ……
本版本与网上其他资源不同之处在于,此版本可进行编辑,搜索,已进行内容识别扫描。可全选,可编辑,可剪切文字。 部分目录如下: 目录 第一篇预备知识 第1 章C++ 编程技术...................................................... 3 1-1 C++与C 语言的区别................................................... 4 1-1-1 文件扩展名的改变,.............................................. 4 1-1-2 简化输入输出手段.............................................. 5 1-1-3 数据类型声明的改变,............................................ 5 1-1-4 动态内存分配运算符的使用....................................... 6 1-1-5 弓I 用(References) 类型, ··················•················•"'''8 1-1-6 const 语义的扩展................................................ 9 1-1-7 指针声明类型与对象类型相一致.................................. 13 1-1-8 int 与char 不再等价............................................. 13 1-1-9 结构数据类型的变化............................................ 13 1-1-10 数组和指针技术的不同......................................... 14 1-2 C++存储技术........................................................ 15 1-2 一I C++存储类型.................................................. 15 I6I7 ..... .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. •. .• •. .• .. .. .. .. .. .. .. .. .. .. .. .. . 期 符存 饰生 修的 取象 存对 廿廿 I2I32 ~3 c c 1-3 C++ 函数技术........................................................ 19 1-3-1 类的构造函数、析构函数与赋值函数,..... - ........ - .............. 19 1-3-2 在派生类实现类的基本函数,................... _ ............... 29 1-3-3 内联函数技术,........ ................................... 30 3133 ..... .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 现 实 术的 技制 数机 函象 元对 友向 由 曰1. l -C 1 4 3337 ..... .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 术术 技技 承载 继重 的数 类函 l4l44 3 ~ 3840 ..... .. .. .. .. .. .. •. .• .. .. .. .. .. .. .. .. .. .. .. •. .• .. •. .• •. •• .• .. .. .. .. .. .. .. .. .. •. •• .• . 术 技 类 术象 技抽 载和 重数 符函 算虚 运纯 l4l34 4 1-5 小结...............................................

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值