f IOS-c++ iostream fstream - Powered by qidao123.com技术社区

c++ iostream fstream

打印 上一主题 下一主题

主题 1984|帖子 1984|积分 5954

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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,也用于输出错误或日记信息,与表现器关联,但它是缓冲的。

(二)主要操作


  • 输入操作

    • 提取运算符(>>):用于从输入流中读取数据。
      1. int num;
      2. cin >> num; // 从标准输入流读取一个整数
      复制代码
    • getline()函数:用于从输入流中读取一行字符串。
      1. string line;
      2. getline(cin, line); // 从标准输入流读取一行
      复制代码
    • cin.get():可以用于读取单个字符或一行字符。
      1. char ch = cin.get(); // 读取一个字符
      2. cin.get(line, 100); // 读取一行,最多100个字符
      复制代码
    • cin.ignore():用于忽略输入流中的字符,通常用于扫除输入缓冲区。
      1. cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 清除缓冲区中的内容
      复制代码

  • 输出操作

    • 插入运算符(<<):用于将数据输出到输出流。
      1. cout << "Hello, World!" << endl; // 输出字符串
      2. cout << 42 << endl; // 输出整数
      复制代码
    • endl和\n

      • endl是一个利用符,用于输出换行符,并刷新缓冲区,确保全部待输出的内容都被输出。
      • \n是一个平凡字符,仅用于换行,不会刷新缓冲区。
      1. cout << "Line 1" << endl;
      2. cout << "Line 2" << '\n';
      复制代码

    • 格式化输出

      • 使用利用符(如setw、setprecision等)来控制输特别式。
      1. #include <iomanip> // 包含操纵符的头文件
      2. cout << setw(10) << 42 << endl; // 设置输出宽度为10
      3. cout << setprecision(2) << 3.14159 << endl; // 设置小数点后保留2位
      复制代码


  • 流状态

    • 流对象有状态标志,用于表示流的状态。

      • good():查抄流是否处于精良状态。
      • eof():查抄是否到达文件末尾(对于输入流)。
      • fail():查抄流是否失败(如格式错误)。
      • bad():查抄流是否处于错误状态(如文件无法打开)。
      1. if (cin.fail()) {
      2.     cout << "Input failed!" << endl;
      3. }
      复制代码


二、<fstream>库

<fstream>库主要用于处理文件输入输出,提供了文件流类,用于操作文件。
(一)焦点概念


  • 文件流类

    • ifstream:用于文件输入,继承自istream。
    • ofstream:用于文件输出,继承自ostream。
    • fstream:用于同时支持文件输入和输出,继承自iostream。

  • 文件打开模式

    • 在打开文件时,可以指定文件的打开模式,常见的模式有:

      • ios::in:以输入方式打开文件(默认模式)。
      • ios:ut:以输出方式打开文件(默认模式)。
      • ios::app:以追加模式打开文件,写入的内容会追加到文件末尾。
      • ios::ate:打开文件后,文件指针定位到文件末尾。
      • ios::binary:以二进制模式打开文件,而不是文本模式。
      • ios::trunc:假如文件已存在,先清空文件内容再打开。


(二)主要操作


  • 文件打开

    • 使用文件流对象的构造函数或open()成员函数打开文件。
      1. ofstream out("output.txt"); // 打开文件用于输出
      2. ifstream in("input.txt"); // 打开文件用于输入
      3. fstream io("file.txt", ios::in | ios::out); // 打开文件用于输入和输出
      复制代码
    • 假如文件无法打开,流对象的状态会变为错误状态,可以通过fail()或bad()查抄。

  • 文件读写

    • 写入文件

      • 使用插入运算符(<<)将数据写入文件。
      1. ofstream out("output.txt");
      2. if (out.is_open()) {
      3.     out << "Hello, File!" << endl;
      4.     out.close(); // 关闭文件
      5. }
      复制代码

    • 读取文件

      • 使用提取运算符(>>)从文件中读取数据。
      1. ifstream in("input.txt");
      2. if (in.is_open()) {
      3.     string line;
      4.     while (getline(in, line)) { // 按行读取文件
      5.         cout << line << endl;
      6.     }
      7.     in.close(); // 关闭文件
      8. }
      复制代码

    • 按字节读写文件

      • 使用read()和write()成员函数可以按字节读写文件,实用于二进制文件。
      1. ofstream out("data.bin", ios::binary);
      2. if (out.is_open()) {
      3.     int num = 42;
      4.     out.write(reinterpret_cast<char*>(&num), sizeof(num)); // 写入整数
      5.     out.close();
      6. }
      7. ifstream in("data.bin", ios::binary);
      8. if (in.is_open()) {
      9.     int num;
      10.     in.read(reinterpret_cast<char*>(&num), sizeof(num)); // 读取整数
      11.     cout << num << endl;
      12.     in.close();
      13. }
      复制代码


  • 文件关闭

    • 使用close()成员函数关闭文件流。
      1. ofstream out("file.txt");
      2. out.close(); // 关闭文件
      复制代码

  • 文件定位

    • 文件流对象提供了定位指针,可以通过seekg()(输入流)和seekp()(输出流)函数移动定位指针。
      1. ifstream in("file.txt");
      2. in.seekg(10); // 将输入流定位指针移动到文件的第10个字节
      3. ofstream out("file.txt", ios::out | ios::ate); // 打开文件并定位到文件末尾
      4. out.seekp(0); // 将输出流定位指针移动到文件开头
      复制代码

  • 文件状态

    • 文件流对象也有状态标志,与<iostream>中的流状态类似。
      1. ifstream in("file.txt");
      2. if (in.fail()) {
      3.     cout << "Failed to open file!" << endl;
      4. }
      复制代码

三、总结

<iostream>和<fstream>库是C++中处理输入输出的焦点库,<iostream>主要用于标准输入输出,而<fstream>用于文件操作。它们提供了丰富的功能,包括格式化输入输出、文件读写、文件定位等。通过公道使用这些库,可以方便地实现各种输入输出需求。
示例代码

以下是一个综合示例,展示怎样使用<iostream>和<fstream>库:
  1. #include <iostream>
  2. #include <fstream>
  3. #include <iomanip>
  4. #include <string>
  5. #include <limits>
  6. int main() {
  7.     // 标准输入输出
  8.     std::cout << "Enter your name: ";
  9.     std::string name;
  10.     std::getline(std::cin, name);
  11.     std::cout << "Hello, " << name << "!" << std::endl;
  12.     // 文件输出
  13.     std::ofstream out("output.txt");
  14.     if (out.is_open()) {
  15.         out << "Name: " << name << std::endl;
  16.         out.close();
  17.     } else {
  18.         std::cerr << "Failed to open output file!" << std::endl;
  19.     }
  20.     // 文件输入
  21.     std::ifstream in("output.txt");
  22.     if (in.is_open()) {
  23.         std::string line;
  24.         while (std::getline(in, line)) {
  25.             std::cout << "File content: " << line << std::endl;
  26.         }
  27.         in.close();
  28.     } else {
  29.         std::cerr << "Failed to open input file!" << std::endl;
  30.     }
  31.     // 格式化输出
  32.     double pi = 3.141592653589793;
  33.     std::cout << std::fixed << std::setprecision(5) << pi << std::endl;
  34.     return 0;
  35. }
复制代码
希望这些内容对你有所帮助!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

祗疼妳一个

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表