C++学习笔记——输入、输出和文件

发布时间:2024年01月14日

目录

一、标准输入输出

2.1下面是它们的基本用法

解释

二、格式化输入输出

2.2下面是一个示例

解释

三、文件读写

3.3下面是一个文件读写的示例

解释

四、异常处理和错误检测

4.1下面是一个示例

解释

五、一个实例代码

5.1如何读取 CSV 文件,并计算每一列的平均值


上一篇文章链接:

C++ 是一门功能强大的编程语言,它提供了很多工具来实现各种编程任务。在本文中,我们将介绍 C++ 中的三个重要概念:友元、嵌套类和异常。

C++学习笔记——友元、嵌套类、异常-CSDN博客文章浏览阅读20次。友元、嵌套类和异常是 C++ 中三个重要的概念,它们可以提高程序的灵活性、封装性和健壮性。但是,需要注意的是过度使用它们会破坏程序的封装性、增加代码的复杂度和影响程序的性能。因此,在编写程序时,应根据实际情况选择适当的编程技术来提高程序的可读性、可维护性和可靠性。https://blog.csdn.net/m0_62338174/article/details/135573148?spm=1001.2014.3001.5502

?

??? C++ 是一种功能强大的编程语言,它提供了丰富的输入、输出和文件操作功能,使得开发者能够方便地与用户交互、读写数据以及进行文件处理。本篇博客将详细介绍 C++ 的输入输出流(iostream)库,并给出代码示例和详细解释,帮助读者深入理解 C++ 中的输入输出和文件操作。

一、标准输入输出

标准输入流(cin)和标准输出流(cout)是 C++ 中常用的标准输入输出方式。

2.1下面是它们的基本用法

#include <iostream>

int main() {
    int age;
    std::cout << "请输入您的年龄:";
    std::cin >> age;
    std::cout << "您的年龄是:" << age << std::endl;

    return 0;
}

解释

std::cin 用于从标准输入流读取数据。

std::cout 用于向标准输出流输出数据。

>> 运算符用于从输入流中提取数据。

<< 运算符用于将数据插入到输出流中。

std::endl 用于在输出流中插入换行符。

二、格式化输入输出

C++ 提供了格式化标志和操纵算子,可以控制输入输出的格式。

2.2下面是一个示例

#include <iostream>
#include <iomanip>

int main() {
    double pi = 3.14159;
    std::cout << "圆周率:" << std::setprecision(4) << pi << std::endl;

    int num = 10;
    std::cout << "数字:" << std::setw(5) << std::setfill('0') << num << std::endl;

    return 0;
}

解释

std::setprecision 设置输出浮点数的精度。

std::setw 设置输出字段的宽度。

std::setfill 设置填充字符。

三、文件读写

操作 C++ 允许我们使用文件流来读写文件。

3.3下面是一个文件读写的示例

#include <iostream>
#include <fstream>

int main() {
    // 写入文件
    std::ofstream outfile("data.txt");
    if (outfile.is_open()) {
        outfile << "Hello, World!";
        outfile.close();
    } else {
        std::cout << "无法打开文件" << std::endl;
    }

    // 读取文件
    std::ifstream infile("data.txt");
    std::string line;
    if (infile.is_open()) {
        while (getline(infile, line)) {
            std::cout << line << std::endl;
        }
        infile.close();
    } else {
        std::cout << "无法打开文件" << std::endl;
    }

    return 0;
}

解释

std::ofstream 用于写入文件。

std::ifstream 用于读取文件。

is_open() 函数用于检查文件是否成功打开。

getline 函数用于逐行读取文件内容。

四、异常处理和错误检测

在文件操作过程中,我们需要进行异常处理和错误检测,以保证程序的健壮性。

4.1下面是一个示例

#include <iostream>
#include <fstream>

int main() {
    std::ofstream outfile("data.txt");
    if (!outfile) {
        std::cerr << "无法打开文件" << std::endl;
        return 1;
    }

    try {
        // 写入文件
        outfile << "Hello, World!";
        outfile.close();

        // 读取文件
        std::ifstream infile("data.txt");
        if (!infile) {
            throw std::runtime_error("无法打开文件");
        }

        std::string line;
        while (getline(infile, line)) {
            std::cout << line << std::endl;
        }
        infile.close();
    } catch (const std::exception& e) {
        std::cerr << "发生错误:" << e.what() << std::endl;
        return 1;
    }

    return 0;
}

解释

使用 std::cerr 输出错误信息。

使用 try-catch 块捕获并处理可能的异常。

使用 throw 抛出自定义异常。

五、一个实例代码

5.1如何读取 CSV 文件,并计算每一列的平均值

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>

int main() {
    std::ifstream infile("data.csv");
    if (!infile) {
        std::cerr << "无法打开文件" << std::endl;
        return 1;
    }

    std::string line;
    std::vector<std::vector<double>> data;
    int num_cols = 0;

    while (getline(infile, line)) {
        std::stringstream ss(line);
        std::vector<double> row;
        double val;

        while (ss >> val) {
            row.push_back(val);
            if (ss.peek() == ',') {
                ss.ignore();
            }
        }

        if (num_cols == 0) {
            num_cols = row.size();
        } else if (row.size() != num_cols) {
            std::cerr << "数据格式不正确" << std::endl;
            return 1;
        }

        data.push_back(row);
    }

    infile.close();

    for (int j = 0; j < num_cols; ++j) {
        double sum = 0.0;
        for (int i = 0; i < data.size(); ++i) {
            sum += data[i][j];
        }
        double avg = sum / data.size();
        std::cout << "第 " << j + 1 << " 列的平均值为:" << avg << std::endl;
    }

    return 0;
}

解释:

  • std::ifstream 用于读取文件。
  • getline 函数用于逐行读取文件内容。
  • 使用 std::stringstream 将每行内容转换为一个 double 类型的 vector。
  • 检查数据格式是否正确,保证每一行的列数相同。
  • 使用二维 vector 存储数据。
  • 计算每一列的平均值。

除此之外,还有一些最佳实践和注意事项:

  1. 输入输出操作需要谨慎处理,避免出现死循环或者读写错误等问题。
  2. 在进行文件读写操作时,需要确保文件存在,并且需要考虑文件权限等问题。
  3. 在读取 CSV 文件等格式化数据时,需要特别注意数据格式的一致性,避免出现数据错误或程序崩溃等情况。
  4. 在进行异常处理时,需要尽可能详细地输出错误信息,以便快速定位问题。
  5. 在进行文件读写操作时,需要及时关闭文件流,释放资源。
  6. 在进行大量数据处理时,需要考虑内存占用等问题,避免出现程序崩溃等情况。
  7. 在进行输入输出和文件操作时,需要充分利用 C++ STL 提供的丰富功能和算法库,以提高开发效率和程序质量。

文章来源:https://blog.csdn.net/m0_62338174/article/details/135573441
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。