马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在C++中,<iostream> 和 <fstream> 是两个非常重要的标准库头文件,它们提供了输入输出流的功能,用于处理控制台输入输出以及文件输入输出。以下是对这两个库的具体介绍,包括它们的主要概念和函数。
一、<iostream>库
<iostream>库主要用于处理标准输入输出流,如控制台输入(cin)和输出(cout)。
(一)焦点概念
- 流(Stream)
- 流是C++中用于表示数据序列的对象,用于在程序和外部装备(如键盘、表现器)之间传输数据。
- 流分为输入流(istream)和输出流(ostream),它们共同的基类是ios。
- istream用于输入,ostream用于输出,iostream是两者的派生类,用于同时支持输入和输出。
- 标准输入输出流对象
- cin:标准输入流对象,范例为istream,通常与键盘输入关联。
- cout:标准输出流对象,范例为ostream,通常与表现器输出关联。
- cerr:标准错误输出流对象,范例为ostream,用于输出错误信息,与表现器关联,但与cout差别的是,cerr是未缓冲的,即输出的内容会立刻表现,而不会被暂存。
- clog:标准日记输出流对象,范例为ostream,也用于输出错误或日记信息,与表现器关联,但它是缓冲的。
(二)主要操作
- 输入操作
- 提取运算符(>>):用于从输入流中读取数据。
- int num;
- cin >> num; // 从标准输入流读取一个整数
复制代码 - getline()函数:用于从输入流中读取一行字符串。
- string line;
- getline(cin, line); // 从标准输入流读取一行
复制代码 - cin.get():可以用于读取单个字符或一行字符。
- char ch = cin.get(); // 读取一个字符
- cin.get(line, 100); // 读取一行,最多100个字符
复制代码 - cin.ignore():用于忽略输入流中的字符,通常用于扫除输入缓冲区。
- cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 清除缓冲区中的内容
复制代码
- 输出操作
- 插入运算符(<<):用于将数据输出到输出流。
- cout << "Hello, World!" << endl; // 输出字符串
- cout << 42 << endl; // 输出整数
复制代码 - endl和\n
- endl是一个利用符,用于输出换行符,并刷新缓冲区,确保全部待输出的内容都被输出。
- \n是一个平凡字符,仅用于换行,不会刷新缓冲区。
- cout << "Line 1" << endl;
- cout << "Line 2" << '\n';
复制代码
- 格式化输出
- 使用利用符(如setw、setprecision等)来控制输特别式。
- #include <iomanip> // 包含操纵符的头文件
- cout << setw(10) << 42 << endl; // 设置输出宽度为10
- cout << setprecision(2) << 3.14159 << endl; // 设置小数点后保留2位
复制代码
- 流状态
- 流对象有状态标志,用于表示流的状态。
- good():查抄流是否处于精良状态。
- eof():查抄是否到达文件末尾(对于输入流)。
- fail():查抄流是否失败(如格式错误)。
- bad():查抄流是否处于错误状态(如文件无法打开)。
- if (cin.fail()) {
- cout << "Input failed!" << endl;
- }
复制代码
二、<fstream>库
<fstream>库主要用于处理文件输入输出,提供了文件流类,用于操作文件。
(一)焦点概念
- 文件流类
- ifstream:用于文件输入,继承自istream。
- ofstream:用于文件输出,继承自ostream。
- fstream:用于同时支持文件输入和输出,继承自iostream。
- 文件打开模式
- 在打开文件时,可以指定文件的打开模式,常见的模式有:
- ios::in:以输入方式打开文件(默认模式)。
- ios:
ut:以输出方式打开文件(默认模式)。
- ios::app:以追加模式打开文件,写入的内容会追加到文件末尾。
- ios::ate:打开文件后,文件指针定位到文件末尾。
- ios::binary:以二进制模式打开文件,而不是文本模式。
- ios::trunc:假如文件已存在,先清空文件内容再打开。
(二)主要操作
- 文件打开
- 使用文件流对象的构造函数或open()成员函数打开文件。
- ofstream out("output.txt"); // 打开文件用于输出
- ifstream in("input.txt"); // 打开文件用于输入
- fstream io("file.txt", ios::in | ios::out); // 打开文件用于输入和输出
复制代码 - 假如文件无法打开,流对象的状态会变为错误状态,可以通过fail()或bad()查抄。
- 文件读写
- 写入文件
- ofstream out("output.txt");
- if (out.is_open()) {
- out << "Hello, File!" << endl;
- out.close(); // 关闭文件
- }
复制代码
- 读取文件
- ifstream in("input.txt");
- if (in.is_open()) {
- string line;
- while (getline(in, line)) { // 按行读取文件
- cout << line << endl;
- }
- in.close(); // 关闭文件
- }
复制代码
- 按字节读写文件
- 使用read()和write()成员函数可以按字节读写文件,实用于二进制文件。
- ofstream out("data.bin", ios::binary);
- if (out.is_open()) {
- int num = 42;
- out.write(reinterpret_cast<char*>(&num), sizeof(num)); // 写入整数
- out.close();
- }
- ifstream in("data.bin", ios::binary);
- if (in.is_open()) {
- int num;
- in.read(reinterpret_cast<char*>(&num), sizeof(num)); // 读取整数
- cout << num << endl;
- in.close();
- }
复制代码
- 文件关闭
- 使用close()成员函数关闭文件流。
- ofstream out("file.txt");
- out.close(); // 关闭文件
复制代码
- 文件定位
- 文件流对象提供了定位指针,可以通过seekg()(输入流)和seekp()(输出流)函数移动定位指针。
- ifstream in("file.txt");
- in.seekg(10); // 将输入流定位指针移动到文件的第10个字节
- ofstream out("file.txt", ios::out | ios::ate); // 打开文件并定位到文件末尾
- out.seekp(0); // 将输出流定位指针移动到文件开头
复制代码
- 文件状态
- 文件流对象也有状态标志,与<iostream>中的流状态类似。
- ifstream in("file.txt");
- if (in.fail()) {
- cout << "Failed to open file!" << endl;
- }
复制代码
三、总结
<iostream>和<fstream>库是C++中处理输入输出的焦点库,<iostream>主要用于标准输入输出,而<fstream>用于文件操作。它们提供了丰富的功能,包括格式化输入输出、文件读写、文件定位等。通过公道使用这些库,可以方便地实现各种输入输出需求。
示例代码
以下是一个综合示例,展示怎样使用<iostream>和<fstream>库:
- #include <iostream>
- #include <fstream>
- #include <iomanip>
- #include <string>
- #include <limits>
- int main() {
- // 标准输入输出
- std::cout << "Enter your name: ";
- std::string name;
- std::getline(std::cin, name);
- std::cout << "Hello, " << name << "!" << std::endl;
- // 文件输出
- std::ofstream out("output.txt");
- if (out.is_open()) {
- out << "Name: " << name << std::endl;
- out.close();
- } else {
- std::cerr << "Failed to open output file!" << std::endl;
- }
- // 文件输入
- std::ifstream in("output.txt");
- if (in.is_open()) {
- std::string line;
- while (std::getline(in, line)) {
- std::cout << "File content: " << line << std::endl;
- }
- in.close();
- } else {
- std::cerr << "Failed to open input file!" << std::endl;
- }
- // 格式化输出
- double pi = 3.141592653589793;
- std::cout << std::fixed << std::setprecision(5) << pi << std::endl;
- return 0;
- }
复制代码 希望这些内容对你有所帮助!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |