C++ IO流小结
撒花庆祝下,终于看完了(C++Primer)第一部分,即将进入第二部分!
IO部分,最基本的是iostream(istream、ostream),子类有fstream(ifstream、ofstream)和sstream(istringstream、ostringstream)。
iostream是控制窗口输入输出。
fstream是文件输入输出。
sstream是字符串输入输出(内存中)。
cin.tie(); //断开默认的tie(默认cin.tie(&cout))
cin.tie(&cerr); //重新绑定
// construct an ifstream and bind it to the file named ifile
ifstream infile(ifile.c_str());
// ofstream output file object to write file named ofile
ofstream outfile(ofile.c_str());
ifstream infile;
ofstream outfile; infile.open(ifile.c_str());
outfile.open(ofile.c_str());
#include <iostream>
#include <string> using namespace std; int main(){ cout<<"endl!"<<endl;
cout<<"flush!"<<flush;//
cout<<"null-terminated ends!"<<ends; cout<<"\r\n";
//一次性刷新所有输出
cout<<unitbuf<<"first"<<" second"<<nounitbuf; //cout<<"first"<<flush<<"second"<<flush; cout<<"\r\n";
///=----------------------
ostream *old_tie = cin.tie();
cout<<"old_tie:"<<old_tie<<endl;
cin.tie();
cin.tie(&cerr); //why &? cerr.tie();
cerr.tie(&cout); string str;
cin>>str;
cerr<<"hehe";//如何不刷新?
cerr<<"hehe";//如何不刷新? cin>>str;//再来一次
cerr<<str;
cout<<str; return ;
}
#include <iostream>
#include <fstream>
#include <string> using namespace std; int main(){
string infile="abc";
string outfile="abc";
ifstream in(infile.c_str());
ofstream out(outfile.c_str()); if(!in){
cerr<<"Error: unable to open file:"<<infile<<endl;
return -;
}
if(!out){
cerr<<"Error: unable to open file:"<<outfile<<endl;
return -;
} return ;
}
//这个代码有问题,忽略吧
#include <iostream>
#include <string>
#include <stdexcept> using namespace std; void run1();
void run2();
istream &getistream(istream &in); int main(){
run1();
// run2();
//
// getistream(cin);//注意,io流不可复制或赋值。
// if(cin){
// cout<<"OK!"<<endl;
// }else{
// cout<<"sth is wrong"<<endl;
// if(cin.eof()){
// cout<<"eof was not cleared!"<<endl;
// }
// if(cin.bad()){
// cout<<"bad was not cleared!"<<endl;
// }
// if(cin.fail()){
// cout<<"fail was not cleared!"<<endl;
// }
// return -1;
// } return ;
} void run1(){
int val;
while(cin>>val, !cin.eof()){//有输入,不是结尾,就继续 。逗号运算符,返回右边的结果
if(cin.bad()){
cout<<"input stream damaged!"<<endl;
throw runtime_error("IO stream corrupted");
}
if(cin.fail()){
cerr<<"bad input!"<<endl;
// cin.clear(istream::failbit);//
// cin.clear();
// cin.clear(istream::goodbit);
cin.clear(istream::failbit);
cin.clear(istream::badbit);
cin.clear(istream::eofbit);
// cin.clear();//why this does not work? // cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout<<"try again.."<<endl;
continue;
}
cout<<val<<endl;
}
} void run2(){
string str;
cout<<"type sth .."<<endl;
cin>>str;
iostream::iostate old_state= cin.rdstate();//
cout<<old_state<<endl;
cin.clear();//what?
//...
cin.clear(old_state);//清除旧状态,而非设置旧状态!设置应该是setstate。这里书上弄错了吧。 } istream &getistream(istream &in){
// iostream::iostate old_state = in.rdstate();
cout<<"type sth.."<<endl; string str;
while(in>>str, !in.eof()){
//
if( in.fail() || in.bad()){
cerr<<"fail or bad";
in.clear();
continue;
}
cout<<"you typed: "<<str<<endl;
}
// in.setstate(old_state);
// in.clear(old_state);//for what?
in.clear();//恢复正常
return in;
}
#include <iostream>
#include <fstream>
#include <string>
#include <vector> using namespace std;
ifstream &openfile(ifstream &in, string &filename);
ofstream &savefile(ofstream &out, string filename); //复制文件练习
int main(){
string filename="e:/DbUtil.java";
string filename2="e:/DbUtil1.java";
ifstream in;
ofstream out;
openfile(in, filename);
savefile(out,filename2); string line;
while(getline(in, line)){
out<<line<<endl;
}
in.close();
out.close(); return ;
} ifstream &openfile(ifstream &in, string &filename){
in.close();
in.clear(); in.open(filename.c_str()); return in;
} ofstream &savefile(ofstream &out, string filename){
out.close();
out.clear(); out.open(filename.c_str(),ofstream::app);
return out;
}
fstream inOut("xxx", fstream::in | fstream::out);
ate是个什么鬼?app会在每次写操作之前都把写指针置于文件末尾,而ate模式则只在打开时才将写指针置于文件末尾。ate模式在文件操作过程中,可以通过seekp等操作移动指针位置。
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector> using namespace std;
ifstream &openfile(ifstream &in, string &filename); int main(){
string filename="e:/DbUtil.java";
ifstream in;
openfile(in, filename); string line, word; while(getline(in, line)){
istringstream strin(line);
ostringstream strout(line);
while(strin>>word){
strout<<word<<endl;//输出到string了,看不到
cout<<word<<endl;//输出string到控制台
}
}
in.close();
in.clear(); return ;
} ifstream &openfile(ifstream &in, string &filename){
in.close();
in.clear(); in.open(filename.c_str()); return in;
}
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector> using namespace std; //字符串格式转换
int main(){ int val1=,val2=;
string line, word;
ostringstream out;
out<<"val1: "<<val1<<"\n"
<<"val2: "<<val2<<"\n"; cout<<out.str()<<endl; string dump; istringstream in(out.str());
in>>dump>>val1>>dump
>>dump>>val2>>dump; cout<<val1<<"--"<<val2<<endl; return ;
}
C++ IO流小结的更多相关文章
- java IO 流小结
java IO 流小结 java流类图结构 流的分类 按方向 输入流 输出流 按类型 字节流 字符流 结论:只要是处理纯文本数据,就优先考虑使用字符流. 除此之外都使用字节流.
- java学习笔记 --- IO流小结
IO流 |--字节流 |--字节输入流 InputStream int read():一次读取一个字节 int read(byte[] bys):一次读取一个字节数 ...
- Java API —— IO流小结
练习题: 1.复制文本文件 package cn.itcast_01; import java.io.BufferedReader; import java.io.BufferedWriter; im ...
- (27)IO流小结
字节流 输入字节流: ---------| InputStream 所有输入字节流的基类. 抽象类 ------------| FileInputStream 读取文件的输入字节流 --------- ...
- java 21 - 7 IO流小结的图解
- java基础(二十)IO流(三)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...
- JavaSE_ IO流 总目录(19~22)
JavaSE学习总结第19天_IO流119.01 集合的特点和数据结构总结19.02 如何选择使用哪种集合19.03 集合常见功能和遍历方式总结19.04 异常的概述和分类19.05 JVM默认处理异 ...
- 【重学Java】IO流
IO流的UML类图 File类 File类概述和构造方法[应用] File类介绍 它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对象的 对于File而言,其封装的并不是一个真正存在 ...
- Java(36)IO流案例与总结
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228455.html 博客主页:https://www.cnblogs.com/testero ...
随机推荐
- Python 列表 sort() 方法
描述 Python 列表 sort() 方法对列表进行排序. 语法 sort() 方法语法: L.sort([key=None][,reverse=False]) 参数 key-- 可选参数, 如果指 ...
- debian更新源时找不到公钥的解决办法
W: GPG error: http://mirrors.163.com jessie-updates InRelease: The following signatures couldn't be ...
- Spring Boot热部署(springloader)
使用方式一 在pom.xml文件添加依赖包: <plugin> <groupId>org.springframework.boot</groupId> <ar ...
- 转 MySQL中的共享锁与排他锁
原文链接在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行级锁分为共享锁和排他锁两种,本文将详细介绍共享锁及排他锁的概念.使 ...
- css常用标签及属性
css样式表常用的形式有三种,一.行内样式表.二.内部样式表.三.外部样式表 一. <p style="color:red;">nice to meet you< ...
- Spark1.4.1 编译与安装
1.下载下载地址:http://spark.apache.org/downloads.html 选择下载源码 2.源码编译1)解压tar -zxvf spark-1.4.1.tgz2.编译spark有 ...
- 《ZedBoard各种资料网址备份记录》
转载来自于:http://http//www.eefocus.com/crazybingo/blog/2013-02/289101_ab4c8.html 1. Xilinx FPGA相关连接 1) X ...
- MySQL抓包工具:MySQL Sniffer 和性能优化
简介 MySQL Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQLServer 端的请求,并格式化输出.输出内容包访问括时间.访问用户.来源 IP.访问 Database. ...
- 一些常见的关于Linux系统的问题
1 如何看当前Linux系统有几颗物理CPU和每颗CPU的核数? 答:[root@centos6 ~ 10:55 #35]# cat /proc/cpuinfo|grep -c 'physical i ...
- nyoj138 哈希的简单应用(查找)
找球号(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 在某一国度里流行着一种游戏.游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i<=1 ...