C++ 的输入与输出主要通过标准库中的流类实现,包括标准输入流(std::cin
)、标准输出流(std::cout
)、标准错误流(std::cerr
)和文件流(std::ifstream
和 std::ofstream
)。以下是教程内容,包括基本用法、常见技巧以及文件操作的示例。
1. 标准输入输出流
1.1 std::cout
(标准输出)
std::cout
用于将信息输出到控制台。
用法
#include <iostream>int main() {std::cout << "Hello, World!" << std::endl;int number = 42;std::cout << "The number is: " << number << std::endl;return 0;
}
说明
<<
是插入操作符,将数据写入输出流。std::endl
用于换行,并刷新缓冲区(相当于\n
+ flush)。
1.2 std::cin
(标准输入)
std::cin
从控制台获取用户输入。
用法
#include <iostream>int main() {int age;std::cout << "Enter your age: ";std::cin >> age; // 从用户输入获取一个整数std::cout << "Your age is: " << age << std::endl;return 0;
}
说明
>>
是提取操作符,用于从输入流中提取数据。- 输入会自动跳过空白字符(如空格、换行符)。
1.3 std::cerr
和 std::clog
std::cerr
:输出错误消息(不带缓冲)。std::clog
:输出日志信息(带缓冲)。
示例
#include <iostream>int main() {std::cerr << "Error: Something went wrong!" << std::endl;std::clog << "Log: Application started." << std::endl;return 0;
}
1.4 格式化输出
C++ 提供了一些工具来控制输出格式,常用头文件 <iomanip>
。
示例
#include <iostream>
#include <iomanip>int main() {double pi = 3.14159265358979;std::cout << "Default: " << pi << std::endl;// 控制小数位数std::cout << "Fixed: " << std::fixed << std::setprecision(2) << pi << std::endl;// 控制宽度和对齐std::cout << "Width: " << std::setw(10) << pi << std::endl;return 0;
}
常用工具
std::setw(n)
:设置宽度。std::setprecision(n)
:设置小数点后位数。std::fixed
和std::scientific
:固定小数点格式或科学计数法。
2. 文件输入输出
C++ 提供了文件流类:
- 输入流:
std::ifstream
- 输出流:
std::ofstream
- 读写流:
std::fstream
2.1 写入文件
示例
#include <iostream>
#include <fstream>int main() {std::ofstream outfile("output.txt"); // 打开文件(创建新文件或覆盖已有文件)if (!outfile) {std::cerr << "Error: Cannot open file." << std::endl;return 1;}outfile << "Hello, file!" << std::endl;outfile << 42 << std::endl;outfile.close(); // 关闭文件std::cout << "Data written to file." << std::endl;return 0;
}
2.2 读取文件
示例
#include <iostream>
#include <fstream>
#include <string>int main() {std::ifstream infile("output.txt"); // 打开文件if (!infile) {std::cerr << "Error: Cannot open file." << std::endl;return 1;}std::string line;while (std::getline(infile, line)) { // 按行读取文件内容std::cout << line << std::endl;}infile.close(); // 关闭文件return 0;
}
说明
std::getline()
读取整行,适合处理文本文件。- 文件结束时
infile.eof()
会返回true
。
2.3 文件读写模式
文件流的打开模式:
std::ios::in
:读取模式。std::ios::out
:写入模式。std::ios::app
:追加模式。std::ios::trunc
:清空文件内容(默认)。std::ios::binary
:二进制模式。
示例:追加内容
#include <iostream>
#include <fstream>int main() {std::ofstream outfile("output.txt", std::ios::app); // 打开文件以追加模式if (!outfile) {std::cerr << "Error: Cannot open file." << std::endl;return 1;}outfile << "Appending a new line." << std::endl;outfile.close();return 0;
}
3. 高级功能:文件与流状态检查
3.1 检查文件状态
示例
#include <iostream>
#include <fstream>int main() {std::ifstream infile("nonexistent.txt");if (!infile) {std::cerr << "Error: File does not exist." << std::endl;return 1;}return 0;
}
常用方法
is_open()
:文件是否成功打开。eof()
:是否到达文件末尾。fail()
:流状态是否失败。good()
:流是否正常。
3.2 异常处理
C++ 文件流支持异常处理,使用 exceptions()
方法启用。
示例
#include <iostream>
#include <fstream>int main() {std::ofstream outfile;outfile.exceptions(std::ofstream::failbit | std::ofstream::badbit);try {outfile.open("readonly.txt");outfile << "Attempting to write." << std::endl;} catch (const std::ios_base::failure& e) {std::cerr << "Exception: " << e.what() << std::endl;}return 0;
}
4. 综合示例:统计文件中的单词数量
#include <iostream>
#include <fstream>
#include <string>int main() {std::ifstream infile("example.txt");if (!infile) {std::cerr << "Error: Cannot open file." << std::endl;return 1;}std::string word;int count = 0;while (infile >> word) {count++;}std::cout << "Word count: " << count << std::endl;infile.close();return 0;
}
学习建议与实践
-
动手实践:
- 创建简单的文本文件,尝试文件读写操作。
- 编写小程序,如统计文件字符数、单词数或查找关键字。
-
参考文档:
- cplusplus.com
- cppreference.com
通过掌握输入与输出操作,可以更高效地处理文件和用户交互,是 C++ 编程的重要基础。