C++练习题:文件读写操作基础

第一部分:考点与作答区

考点:

  • 文件流的基本概念
  • 文件的打开与关闭
  • 文件的读写操作

作答区: 编写一个C++程序,完成以下要求:

  1. 使用 fstream 类打开一个名为 data.txt 的文件。
  2. 向文件中写入一行文本。
  3. 关闭文件。
  4. 再次打开文件,并读取文件中的内容。
  5. 关闭文件。

请在下方空白处编写代码:

// 在此处编写代码
第二部分:解题思路与答案

解题思路:

  1. 首先,使用 fstream 类创建一个文件流对象,并打开一个名为 data.txt 的文件。
  2. 然后,使用 ofstream 对象(文件输出流)向文件中写入一行文本。
  3. 写入完成后,关闭文件。
  4. 再次打开文件,这次使用 ifstream 对象(文件输入流)来读取文件中的内容。
  5. 读取完成后,关闭文件。

答案:

#include <iostream>
#include <fstream>
#include <string>

int main() {
    // 创建文件流对象并打开文件
    std::ofstream outFile("data.txt");
    if (!outFile) {
        std::cerr << "Error opening file." << std::endl;
        return 1;
    }

    // 写入文本
    outFile << "This is a test." << std::endl;

    // 关闭文件
    outFile.close();

    // 再次打开文件
    std::ifstream inFile("data.txt");
    if (!inFile) {
        std::cerr << "Error opening file." << std::endl;
        return 1;
    }

    // 读取文件内容
    std::string line;
    std::getline(inFile, line);
    std::cout << "Read from file: " << line << std::endl;

    // 关闭文件
    inFile.close();

    return 0;
}

在这段代码中,我们首先使用 fstream 类创建了一个名为 data.txt 的文件流对象。接着,我们使用 ofstream 对象向文件中写入了一行文本。写入完成后,我们关闭了文件。然后,我们再次打开文件,这次使用 ifstream 对象来读取文件中的内容。读取完成后,我们关闭了文件。 

第三部分:扩展考点与扩展作答区

扩展考点:

  • 文件流操作中的错误处理
  • 文件的随机访问

扩展作答区: 在原有程序的基础上,增加以下功能:

  1. 在写入文件之前,检查文件是否已经存在,如果存在,则询问用户是否要覆盖。
  2. 使用 fstream 类的随机访问功能,定位到文件的中间位置,并写入新文本。

请在下方空白处编写代码:

// 在此处编写代码
第四部分:扩展解答思路与答案

扩展解答思路:

  1. 在写入文件之前,使用 fstream 类的 is_open() 函数检查文件是否已经打开。如果文件已经存在,使用 ofstream 对象的 exist() 函数检查文件是否已经存在。如果文件存在,询问用户是否要覆盖。
  2. 使用 fstream 类的随机访问功能,使用 fstream 对象的 tellp() 函数获取文件指针的位置,然后使用 seekp() 函数将文件指针定位到文件的中间位置。
  3. 在中间位置写入新文本。

答案:

#include <iostream>
#include <fstream>
#include <string>

int main() {
    // 创建文件流对象并打开文件
    std::ofstream outFile("data.txt");
    if (!outFile) {
        std::cerr << "Error opening file." << std::endl;
        return 1;
    }

    // 检查文件是否已经存在,如果存在,询问用户是否要覆盖
    if (outFile.exist() && !outFile.is_open()) {
        std::string choice;
        std::cout << "The file already exists. Do you want to overwrite it? (yes/no): ";
        std::cin >> choice;
        if (choice != "yes") {
            std::cout << "Exiting." << std::endl;
            return 1;
        }
    }

    // 写入文本
    outFile << "This is a test." << std::endl;

    // 关闭文件
    outFile.close();

    // 再次打开文件
    std::ifstream inFile("data.txt");
    if (!inFile) {
        std::cerr << "Error opening file." << std::endl;
        return 1;
    }

    // 读取文件内容
    std::string line;
    std::getline(inFile, line);
    std::cout << "Read from file: " << line << std::endl;

    // 关闭文件
    inFile.close();

    return 0;

www.xyxxrc.com
www.zmdxp.com
www.hhlcrc.com
www.cxdyrc.com
www.ncnbrc.com
}

 在这段代码中,我们首先使用 fstream 类创建了一个名为 data.txt 的文件流对象。然后,我们检查文件是否已经存在,如果存在,我们询问用户是否要覆盖。如果用户选择不覆盖,程序将退出。如果文件不存在或用户选择覆盖,我们将文本写入文件。写入完成后,我们关闭了文件。然后,我们再次打开文件,使用 fstream 类的随机访问功能,将文件指针定位到文件的中间位置,并在中间位置写入新文本。

 

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值