- 浏览: 324597 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
huangyunbin:
swc.advance(); 这个什么时候被调用是最核心的 ...
滑动窗口计数java实现 -
80后的童年2:
深入浅出MongoDB应用实战开发网盘地址:https://p ...
MongoDB 从入门到精通专题教程 -
rryymmoK:
深入浅出MongoDB应用实战开发下载地址:http://pa ...
MongoDB 从入门到精通专题教程 -
u012352249:
怎么支持多个窗口啊?
滑动窗口计数java实现 -
rryymmoK:
深入浅出MongoDB应用实战开发百度网盘下载:链接:http ...
MongoDB 从入门到精通专题教程
* 重载
+ 拷贝构造函数A(const A& o)会把原对象原样复制一份.
+ 运算符重载
- 单目
- 双目
- 特殊
------------------------------
* I/O流(iostream)
I 输入 从控制台(文件)读取
O 输出 向控制台(文件)写
牢牢记住: 文件和控制台的IO是完全统一的.
数据的传输叫流
所有的流操作都在头文件 iostram 中.
cin 键盘(标准输入设备)
cout 屏幕(标准输出设备)
利用重定向改变输入输出方向.
特点:提供标准的IO操作,支持缓冲,支持重定向(改向).
满了
输出 ---------> 显示
刷新
回车
输入过程(cin):键盘 -------> 键盘缓冲区 ---> 输入缓冲区 --> 程序
读取
//以下两个输出没有缓冲,也不能重定向,用法跟 cout 完全一样
cerr
clog
ios
|
------------
| |
istream ostream
| |
-------------
|
ifstream iostream ofstream
根据以上继承关系,文件IO与控制台IO完全一致.
以下我看们如何准备文件对象:
控制台对象是已经准备好的.自动释放.
ios里重写了(void *)操作运算符.当出错会输出NULL,也就是0
一个IO流对象在没有出错时可以当成真,在出错时当成假.
--------------------------------------------------
输入操作:把字符变成了需要的类型.
因此输入还有一个名字叫格式化输入.
而输出与输入刚好相反.也称格式化输出.
* 非格式化的输入输出.(只对字符操作)
不做任何的格式处理.
*get()
读取一个字符
* getline(字符数组名,长度)要保证长度够用,比一行实际长度大.
输入流一旦处于错误状态就不再执行任何输入.
但我们可以手动将其恢复到正常状态.cin.clear();//不是清缓冲区.
我们可以用while(cin.get!='\n');//清空缓冲区
第三个参数指定结束字符,默认为换行符.
getline(cin, str, '$');
* peek() 偷看输入流中的下一个字符,返回它的ascii码.
* cin.putback()//向输入流中插入一个字符串.
读哪一个退哪一个,不能乱退.
我们可以用cin.width(10)//来限制输入宽度.
cin >> ws;//跳过输入缓冲区中空白字符.
* read() //后面再说
--------------------------
* 非格式化的输出(只对字符操作)
+ put(char) //输出一个字符,与cout<<相比,它更纯洁.
cout.put(cin.get()); //保证输出一定是个字符
<< endl;//输出一行,没有putline()函数
fout.write(地址,字节数)//把一块内存中的内容写到文件中.
fin.read(地址,字节数)//把文件中的内容读到一块内存空间中.
函数原型: XXX(char* addr, int bytes)
//因此可以将任何数据保存到文件中.将内存中变量保存到文件中.
+ 拷贝构造函数A(const A& o)会把原对象原样复制一份.
+ 运算符重载
- 单目
- 双目
- 特殊
------------------------------
* I/O流(iostream)
I 输入 从控制台(文件)读取
O 输出 向控制台(文件)写
牢牢记住: 文件和控制台的IO是完全统一的.
数据的传输叫流
所有的流操作都在头文件 iostram 中.
cin 键盘(标准输入设备)
cout 屏幕(标准输出设备)
利用重定向改变输入输出方向.
特点:提供标准的IO操作,支持缓冲,支持重定向(改向).
满了
输出 ---------> 显示
刷新
回车
输入过程(cin):键盘 -------> 键盘缓冲区 ---> 输入缓冲区 --> 程序
读取
//缓冲例子1 #include <iostream> using namespace std; int main() { char ch,c; cout << "Please input a char :"; cin >> ch; cout << "ch=" << ch << endl; cout << "Please input a char :"; cin >> c; cout << "c=" << c << endl; }
//以下两个输出没有缓冲,也不能重定向,用法跟 cout 完全一样
cerr
clog
//缓冲例子2 #include <iostream> using namespace std; #include <ctime> int main() { cout << "Hello"; cerr << "World"; for(int i=0;i<5;i++){ time_t t = time(NULL); while(t==time(NULL)); } cout << endl; }//会输出 WorldHello
ios
|
------------
| |
istream ostream
| |
-------------
|
ifstream iostream ofstream
根据以上继承关系,文件IO与控制台IO完全一致.
以下我看们如何准备文件对象:
控制台对象是已经准备好的.自动释放.
ofstream fout("a.txt"); fout << "Hello"; fout.close(); ifstream fin("a.txt"); fin >> 变量名; fin.close();
ios里重写了(void *)操作运算符.当出错会输出NULL,也就是0
一个IO流对象在没有出错时可以当成真,在出错时当成假.
--------------------------------------------------
输入操作:把字符变成了需要的类型.
因此输入还有一个名字叫格式化输入.
而输出与输入刚好相反.也称格式化输出.
* 非格式化的输入输出.(只对字符操作)
不做任何的格式处理.
*get()
读取一个字符
get()从输入流中读取一个字符,返回字符的ascii码. cout << cin.get() << ... get(char&)从输入流中读取一个字符,保存到形参中.与 cin>>...相比,它能读一些特殊字符.而cin是不行的. get(char&)可以读取任何字符.
//例程 #include <iostream> #include <ctime> #include <fstream> using namespace std; int main( int argc, char* argv[] ) { cout << " ===== " << argv[1] << " ======" << endl; ifstream fin( argv[1] ); char ch; while ( fin.get(ch) ){ time_t t = time(NULL); while(t==time(NULL)); cout << ch << flush; } fin.close(); }
* getline(字符数组名,长度)要保证长度够用,比一行实际长度大.
char string1[256]; cin.getline(string1,256); //get a whole line cin >> string1; // stop at the first blank space
输入流一旦处于错误状态就不再执行任何输入.
但我们可以手动将其恢复到正常状态.cin.clear();//不是清缓冲区.
我们可以用while(cin.get!='\n');//清空缓冲区
cin.ignore(长度, '\n')//清空缓冲区 void istream::ignore(int len=1,char c=-1) //函数原型 { for(int i=0; i<len; i++) if( cin.get()==c ) break; //for(int i=0; i<len && get()!=c; i++); } getline(in,str,'\n') in.getline(buf,len,'\n')
第三个参数指定结束字符,默认为换行符.
getline(cin, str, '$');
* peek() 偷看输入流中的下一个字符,返回它的ascii码.
#include <iostream> using namespace std; int main() { cout << "Input No. or name:"; int no; char name[20]; char ch = cin.peek(); //偷看一下,不会读走 if(ch>='0' && ch<='9'){ cin >> no; cout << "no=" << no << endl; } else{ cin.getline(name,20); cout << "name=" << name << endl; } }
* cin.putback()//向输入流中插入一个字符串.
读哪一个退哪一个,不能乱退.
//例程 #include <iostream> using namespace std; int main() { char ch; int n; cout << "Input an integer:" ; cin.get(ch); cin >> n; cout << "ch=" << ch << endl; cout << "n=" << n << endl; cout << "Input an integer:" ; cin.ignore(1000,'\n'); cin.get(ch); cin.putback(ch); cin >> n; cout << "ch=" << ch << endl; cout << "n=" << n << endl; }
我们可以用cin.width(10)//来限制输入宽度.
cin >> ws;//跳过输入缓冲区中空白字符.
* read() //后面再说
--------------------------
* 非格式化的输出(只对字符操作)
+ put(char) //输出一个字符,与cout<<相比,它更纯洁.
cout.put(cin.get()); //保证输出一定是个字符
<< endl;//输出一行,没有putline()函数
fout.write(地址,字节数)//把一块内存中的内容写到文件中.
fin.read(地址,字节数)//把文件中的内容读到一块内存空间中.
函数原型: XXX(char* addr, int bytes)
#include <iostream> #include <fstream> using namespace std; int main() { int n = 123; double d = 4.56; struct S{ char c; bool b; char addr[100]; }; S s={'S',true,"beijin"}; class A{ int data; public : A(int d=0) : data(d){} void show() const { cout << "data=" << data << endl; } }; A a(789); ofstream fout("var.dat"); fout.write((char*)&n,sizeof(n)); fout.write((char*)&d,sizeof(d)); fout.write((char*)&s,sizeof(s)); fout.write((char*)&a,sizeof(a)); } #include <iostream> #include <fstream> using namespace std; int main() { int n = 0; double d = 0.0; struct S{ char c; bool b; char addr[100]; }; S s={'\0',false,""}; class A{ int data; public : A(int d=0) : data(d){} void show() const { cout << "data=" << data << endl; } }; A a(0); ifstream fin("var.dat"); fin.read((char*)&n,sizeof(n)); fin.read((char*)&d,sizeof(d)); fin.read((char*)&s,sizeof(s)); fin.read((char*)&a,sizeof(a)); fin.close(); cout << "n=" << n << endl; cout << "d=" << d << endl; cout << "s.c=" << s.c << endl; cout << "s.b=" << s.b << endl; cout << "s.addr=" << s.addr << endl; a.show(); }
//因此可以将任何数据保存到文件中.将内存中变量保存到文件中.
发表评论
-
UC++之目录和文件操作
2009-06-05 11:55 1325* UC + 文件系统 - 目 ... -
用c++实现二叉树增删改查和快速排序算法
2009-06-02 13:18 2682//快速排序 #include <iostream ... -
快速排序完整示例
2009-06-01 21:04 1118#include <iostream> usin ... -
C++容器与迭代器
2009-06-01 17:55 2024* 容器的迭代器还有几种: + iterator:正常迭 ... -
c++排序算法与模板和STL
2009-05-31 13:32 1856* 冒泡排序 一轮比较所有相邻数据对,如果顺序不合适就交换, ... -
C++算法与二叉树的实现
2009-05-30 18:35 2556* 输出格式控制 + 成员函数:width fill pr ... -
c++链表 异常 内部类 输出格式控制
2009-05-29 21:36 1740C(控制台) F(文件) ------------- ... -
C++拷贝构造函数与运算符重载
2009-05-26 20:32 2476拷贝构造函数与运算符的重载 * 多态 - 前堤:继承,虚函 ... -
C++多态与类型转换
2009-05-25 17:10 1905c++中字符串的处理,用string进行处理,实际上它是一个类 ... -
类的继承
2009-05-24 09:42 10211,如何定义,实现一个类 ... -
面向对象编程
2009-05-23 19:20 746//倒计时 #include <iostr ... -
C++ 面向对象
2009-05-23 15:40 966* 指针简单总结 //接受命令行参数的函数 int main ... -
C与C++中的time相关函数
2009-05-23 14:03 1334本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所 ... -
c++指针续
2009-05-23 11:16 989//常指针,或叫定指针:指 ... -
C++指针
2009-05-22 19:22 1206C++ 里有字符串类型string ,最大可支持1G,可用st ... -
数组本质
2009-05-21 18:52 1244数组是一片连续的内存空间,定义时一般指明大小和类型,这样编译器 ... -
C++用递归解决汉诺塔问题(续)
2009-05-19 12:16 971#include <iostream.h> ... -
c++ 递归实例二
2009-05-18 22:37 1706#include <iostream.h> ... -
C++用递归解决汉诺塔问题
2009-05-18 21:54 2576递归确实是一个不错的算法,可以将原来很复杂的问题简化.这里要注 ... -
C++ 入门
2009-05-15 21:31 0一次性修改LINUX环境变量:(bash)export $PA ...
相关推荐
C++的I/O流实验报告 C++的I/O流是计算机编程中一个非常重要的概念,它涉及到输入/输出操作的各种方式和方法。在本实验报告中,我们将对C++的I/O流进行详细的介绍和实验。 一、实验目的和要求 1. 掌握 C++标准流...
C++中的I/O流是程序与外部世界交互的重要机制,主要涉及输入操作(读操作)和输出操作(写操作)。I/O流的概念来源于数据流,它就像一条河流,允许数据从一个源头流向另一个目的地。在C++中,数据流是以字节序列的...
介绍了 C++的 I/O( 输入输出 )问题,本文结构清晰,讲解简单易懂,对 C++ 的流模型作为细致的分析和讲解, 并介绍了 IO 流类中的各种成员函数,对于输出部分介绍了 cout 流, put 和 write 函数,介绍了 4 种控制...
### C++中的简单文件I/O操作详解 #### 一、ASCII输出 在C++中,进行文件的输入输出(I/O)操作是非常常见的需求。本文将详细介绍如何使用C++来进行基本的ASCII文件I/O操作。 要进行文件I/O操作,首先需要包含相应...
在C++编程中,I/O操作是至关重要的,它允许程序与用户或外部文件进行数据交互。本实验报告主要关注两个关键知识点:1) 在自定义类中重载提取运算符`和插入运算符`>>`,以及2) 文件操作的步骤和方法。 首先,重载`和...
C++中的I/O流是程序处理输入和键盘输入、输出和屏幕输出的一种统一方式。这一概念在第二章“作为对象和类介绍的I/O流”中被深入探讨。本章涵盖了几个关键知识点,包括基本的文件I/O、流工具、字符I/O以及继承。 2.1...
C++ I/O C++ Strings C++ 标准模板库 C++ Bitsets C++ Double-Ended Queues C++ Lists C++ Maps C++ Multimaps C++ Multisets C++ Priority Queues C++ Queues C++ Sets C++ Stacks C++ ...
C++ I/O流的常用控制符和特殊字符 C++ 中的 I/O 流是一个非常重要的概念,它使得程序员可以方便地输入和输出数据。在 C++ 中,I/O 流主要通过流类(stream)来实现,包括输入流(input stream)和输出流(output ...
除了完全支持C的I/O系统外C++还定义了自己的面向对象的I/O系统。和C的I/ O系统一样,C++的I/O系统也完全是集成化的,即c++的I/O系统的那些有差别的地 方,如控制台I/O和磁盘I/O,实际上只是相同机制的不同...
在本文中,我们将深入探讨如何使用C++编程语言来实现基于WSAEventSelect的I/O模型。WSAEventSelect是Windows Socket API(Winsock)提供的一种异步I/O机制,它允许应用程序通过等待网络事件来处理多个套接字。这个...
本程序是一个在Windows环境下使用C++实现的I/O缓冲池演示,旨在帮助开发者理解和应用这一概念。 I/O缓冲池的核心思想是预先在内存中分配一组缓冲区,当进行I/O操作时,数据会被先存入缓冲区,而不是直接写入或读出...
本文将深入探讨如何使用C++实现采用事件通知的socket重叠I/O模型,这一模型在处理大量并发连接时具有显著优势。 首先,我们需要理解“重叠I/O”(又称异步I/O)的概念。在传统的同步I/O模型中,一个调用会阻塞直到I...
文件`BillParserVC`可能包含一个使用C++编写的Windows应用程序示例,它演示了如何使用重叠I/O处理大文件。源码中可能会包含CreateIoCompletionPort、PostQueuedCompletionStatus、GetQueuedCompletionStatus等API的...
以下是一个简化的示例,展示如何在C++中使用VS2010实现重叠I/O和事件通知: ```cpp #include #include #pragma comment(lib, "ws2_32.lib") SOCKET ConnectSocket(INetAddress* address); void ...
"基于C++的PC机与PLC模拟量采集及I/O控制" 在本文中,我们将探讨基于C++的PC机与PLC模拟量采集及I/O控制系统的设计和实现。该系统通过使用C++语言在PC机上实现对PLC(Programmable Logic Controller,编程逻辑控制...
C++ I/O C++ Strings C++ String Streams Miscellaneous C++ C++ Standard Template Library About the Standard Template Library Iterators C++ Algorithms C++ Vectors C++ Double-Ended Queues C++ ...
本篇文章将深入探讨如何在C++/MFC中实现Winsock的IO异步操作,包括选择、异步选择、事件选择和重叠I/O四种方法。 1. **选择(Select)** - **基本概念**:`select`函数是Winsock中用于多路复用的一种机制,它可以...
编写单通路I/O系统中的设备分配程序。 要求: (1) 设计: 系统设备表SDT 控制器表COCT 设备控制表DCT 通道表CHCT 逻辑设备表LUT (2)给出各表目初态 (3)回答信息: 能够分配时,给出设备号 、控制器号、通道...
C++ I/O C++ Strings C++ String Streams Miscellaneous C++ C++ Standard Template Library About the Standard Template Library Iterators C++ Algorithms C++ Vectors C++ Double-Ended Queues ...
本文将深入探讨如何使用C++在Windows环境下实现Socket编程中的Select I/O模型。Select模型是一种经典的多路复用I/O机制,它允许单个进程同时监控多个文件描述符(包括套接字)的状态,以检测何时可以进行读写操作。 ...