流(stream)为C++的输入输出操作提供了许多的便利,通常我们使用的流是std::out用于输出,使用std::cin用于接收用户的输入,除此之外,C++还提供了文件流用于实现文件的读写操作,字符串流用于进行字符串的操作。
标准输入输出
头文件:#include<iostream>
返回值:是流对象,可以当bool类型使用
函数:按行读取 getline(流对象, string对象
//标准输入输出 #include <iostream> #include <string> using namespace std; int main() string str; cin >> str;//按空格换行符tab键分割 cout << str << endl; while (getline(cin, str))//返回值为流对象,可以当作bool类型使用 { if (0 == str.compare("quit"))//或者"quit" == str { break; } cout << str << endl; } cout << "退出成功!" << endl; return 0; }
文本文件输入输出
头文件:#include<fstream>
文件类型
• 文本文件:文件以文本中的ASCII码形式存储在计算机中
• 二进制文件:文件以文本中的二进制形式存储在计算机中,用户一般不能直接读懂
文件打开方式
打开方式 | 解释 |
ios::in | 为读文件而打开文件 |
ios::out | 为写文件而打开文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 追加方式写文件 |
ios::trunc | 如果文件存在先删除,再创建 |
ios::binary | 二进制方式 |
注意:文件打开方式可以配合使用,利用|操作符
例如:用二进制写文件 ios::binary | ios::out
写文件
写文件步骤:
方法一:
- 头文件 #include
- 创建流对象 ofstream ofs;
- 打开文件 ofs.open(“文件路径”,打开方式);
- 打开文件并判断文件是否正确打开 ifs.open(“文件路径”,打开方式);
- 写数据 ofs<<“写入的数据”;
- 关闭文件 ofs.close();
方法二:创建流对象并打开文件:ofstream ofs(“文件路径”, 打开方式);
#include <iostream> #include <fstream> using namespace std; int main() { ofstream ofs; ofs.open("1.txt", ios::out);//以文本写模式打开或者创建文件 //方式二 ofstream ofs("1.txt", ios::out);创建流对象并且打开文件 if (!ofs.is_open())//判断是否打开成功 true-成功 false-失败 { cout << "创建或者打开文件失败" << endl; } ofs << "写入数据" << endl; ofs.close(); return 0; }
读文件
读文件步骤:
- 头文件 #include
- 创建流对象 ifstream ifs;
- 打开文件 ifs.open(“文件路径”,打开方式);
- 判断文件是否正确打开 ifs.open(“文件路径”,打开方式);
- 读数据 四种方式读取
- 关闭文件 ofs.close();
#include <iostream> #include <string> #include <fstream> using namespace std; int main() { ifstream ifs; ifs.open("1.txt", ios::in);//以文本读方式打开文件 if (!ifs.is_open()) { cout << "打开文件失败" << endl; } //方法一 string buffer; while (ifs >> buffer) //读的数据以空格换行符tab分隔 { cout << buffer << endl; } //方法二 while (getline(ifs, buffer))//以行的形式读取 { cout << buffer << endl; } //方法三 char c; while ((c = ifs.get()) != EOF)//一次读取一个字符,读到EOF停止 { cout << c; } //方法四 char b3[100] = { 0 }; while (ifs.getline(b3, 100)) //一次读取100个字节 { cout << b3 << endl; } ifs.close();//关闭文件 return 0; }
二进制文本输入输出
写文件
二进制写文件主要利用流对象成员函数write
函数原型:ostream& write(const char * buffer, int len);
第一个参数:字符指针buffer指向内存中的一段空间
第二个参数:读写的字节数
读文件
二进制读文件主要利用流对象成员函数read
函数原型:istream& read(char * buffer, int len);
第一个参数:字符指针buffer指向内存中的一段空间
第二个参数:读写的字节数
字符串输入输出
头文件:#include<sstream>
往流里面输出
#include <sstream> #include <iostream> using namespace std; int main() { ostringstream s; s << 10; cout << s.str() << endl;//无参 打印 s.str("");//给空字符串 清空 s << 5.9; cout << s.str() << endl; return 0; }
从流里面读出
int main() { //如果这个字符串严格按照空格(空白字符)分隔就可以获取 istringstream stream("10 20 nihao"); int a; int b; string str; stream >> a >> b >> str; cout << a << "\t" << b << "\t" << str << endl; return 0; }
格式控制
头文件:#include
可直接查表
#include <iomanip>//格式控制头文件 int main() { cout << setiosflags(ios::right) << setw(7) << 1 << endl;//设置宽度为7,右对齐 cout << resetiosflags(ios::right);//取消对齐方式 cout << setfill('.') << setw(30) << endl;//宽度设置为30,填充'.'输出 cout << setfill(' ');//恢复填充为空格 cout << setiosflags(ios::showpos) << 1 << endl;//强制在正数前加+ cout << resetiosflags(ios::showpos);//取消强制正数前加+ cout << setiosflags(ios::showpoint) << 1.2 << endl;//强制显示小数点后的无效0 cout << resetiosflags(ios::showpoint);//取消强制显示小数点后的无效0 cout << setiosflags(ios::scientific);//科学计数法 cout << resetiosflags(ios::scientific);//取消科学记数法 cout << setprecision(18);//精度为18,正常为16 cout << setprecision(6);//恢复为6 cout << oct << 15;//输出为八进制数 cout << hex << 20;//输出为十六进制数 return 0; }