第七章 1.输入输出与模板
2020-04-04 16:02:50来源:博客园 阅读 ()
第七章 1.输入输出与模板
目录
- 输入输出流
- 流操作算子**
- 文件读写[^1]
输入输出流
- 输入输出类派生关系
-
标准流对象
- 标准输入流:
cin
——与标准输入设备相连,istream
对象 - 标准输出流:
cout
——与标准输出设备相连,ostream
对象
cerr
——与标准错误输出设备相连(无缓冲区,直接屏显)
clog
——与标准错误输出设备相连(有缓冲区)
- 标准输入流:
-
重定向
freopen("test.txt","w",stdout); freopen("test.txt","r",stdin);
-
istream
类函数istream& getline(char* str,int MaxSize,char delim='\n')
从标准输入流中读取MaxSize-1
个字符,或者遇到默认的换行符\n
停止(不包含\n
或其他分隔符)int peek()
查看输入流首个字符,但不从流中取出istream& putback(char c)
将字符c放置到输入流首部istream& ignore(int num=1,char delim=EOF)
从输入流中删掉前num个字符,或遇到分隔符为止
-
输入控制
while(cin>>x){} //istream对象内对强制类型转换符bool进行了重载,具有了判断功能 if(!cin.getline(str,size)){}
流操作算子**
-
十进制
dec
(默认),oct
(八进制),hex
(十六进制) -
设置宽度
setw(int n)
或cin.width(int n);
——设置后是一次性的,可用于cin
-
设置浮点数精度
setprecision(int n)
或cout.precision(int n);
- 默认不定点方式,保留有效位数(可能采用科学计数法)
- 使用
fixed
或setiosflag(ios::fixed)
后则采用定点方式,保留小数点位数(用resetiosflag(ios::fixed)
取消
-
对齐方式:
left
、right
-
显示正号+:
showpos
;取消显示正号:noshowpos
-
补齐字符
setfill(char c);
-
科学计数法:
scientific
-
实现原理
//ostream里对<<进行了重载,函数内部会调用p所指的函数,并以*this为参数,即cout ostream& operator<< (ostream& (*p)(ostream&)); //用户自定义流操作算子 ostream& tab(ostream& output){ return output<<'\t'; }
文件读写[1]
-
因为
ifstream
和ofstream
分别是istream
和ostream
的派生类,所以也能使用cin
和cout
的函数 -
示例
ifstream fin("input.dat",ios::in|ios::binary); //以二进制方式打开文件用于读取数据 ifstream fin; fin.open("input.dat",ios::in|ios::binary); //Another way to open file ofstream fout("C:\\tmp\\output.txt",ios::out|ios::app); //打开字符文件以追加输出数据 if(!fout){ cout<<"File cannot be opened!"<<endl; return 0; } int location=fin.tellg(); //获取读指针的位置(相对于文件开头的字节偏移量) fin.seekg(location,ios::beg); //将读指针相对文件开头(begin)偏移location个字节 fin.seekg(location,ios::cur); //相对于当前位置(current)偏移 fin.seekg(location,ios::end); //相对于文件尾部(end)偏移 location=fout.tellp(); //写指针当前位置 fout.seekp(location,ios::beg); //seekg为读指针(get),seekp为写指针(print) fin.close(); fout.close();
-
文件路径
"C:\\tmp\\output.txt" //绝对路径 //相对路径: "\\tmp\\output.txt" //当前盘符根目录下的tmp文件夹下的文件 "tmp\\output.txt" //当前文件夹下tmp文件夹下的output.txt文件 "..\\..\\tmp\\output.txt" //当前文件夹下的父文件夹的父文件夹下的tmp里的output.txt
-
二进制文件读写
-
read(char* str,int size);
和write(char *str,int size)
,将size个字符读取/写入str
处(遇文件结尾停止) -
gcount()
显示read读取的字符数,get(char c)
从文件流读取一个字符,put(char c)
输出一个字符到文件流 -
#include<fstream> #include<iostream> using namespace std; struct Stu{ char name[20]; int score; }s; int main(){ ofstream fout("Student.dat",ios::out|ios::binary); //Open binary file for writing if(!fout){ cout<<"Error!"<<endl; return 0; } while(cin>>s.name>>s.score) fout.write((char*) &s,sizeof(s)); //write binary data fout.close(); ifstream fin("Student.dat",ios::in|ios::binary); //Open binary file for reading while(fin.read((char*) &s,sizeof(s))){ cout<<fin.gcount()<<endl; cout<<s.name<<" "<<s.score<<endl; } fin.close(); fstream ioFile("Student.dat",ios::in|ios::out|ios::binary); //Open binary file for i/o if(!ioFile){ cout<<"Error!"<<endl; return 0; } ioFile.seekp(2*sizeof(Stu),ios::beg); ioFile.write("Mike",strlen("Mike")+1); //Write ”Mike\0" to file ioFile.seekg(0,ios::beg); while(ioFile.read((char*) &s,sizeof(s))) cout<<s.name<<" "<<s.score<<endl; return 0; }
-
因为
win\linux\max
行末换行格式不同,所以在windows
上操作二进制文件时,如果不写ios::binary
,Windows
在读取\r\n
时,会自动将\r
删除(少了一个字符),写入时自动在\n
前加\r
(多一个字符)——二进制文件中的\r
、\n
未必真是用来换行的(unix/linux
上加不加ios::binary
无所谓)
-
需包含头文件fstream ??
原文链接:https://www.cnblogs.com/DreamEagle/p/12632060.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:第五章 继承与派生
下一篇:第七章 2.泛型编程(模板)
- 第七章 2.泛型编程(模板) 2020-04-04
- C++ 文件输入输出 2020-03-27
- C++ 字符串输入 2020-03-26
- 标准输入重定向到文件后,如何连续读入,如何判断标准输入流 2020-03-20
- C、C++ 标准输入重定向 & 万能头 - 编程技巧 2020-03-20
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash