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

news2024/9/24 7:21:29

目录

一、标准输入输出

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 提供的丰富功能和算法库,以提高开发效率和程序质量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1380642.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QToolBar、QStatusBar和QDockWidget的使用

1. 工具栏 QToolBar 1.1 创建工具栏 1.1.1 工具栏的基本函数 设置工具栏的停靠区域 参数 Qt::LeftToolBarArea //左边 Qt::RightToolBarArea //右边 Qt::TopToolBarArea //顶部 Qt::BottomToolBarArea //底部 Qt::AllToolBarAreas //所有区域 Qt::NoToolBarArea //没有QMa…

基于NLP的恶意网页识别

基于NLP的恶意网页识别 基于NLP的恶意网页识别引言项目目录回顾优化HTML标签提取结果使用预训练模型Fine-tune数据处理和模型训练模型训练与评估模型导出部署与预测总结 基于NLP的恶意网页识别 引言 欢迎阅读《 基于NLP的恶意网页识别》&#xff0c;在前三篇中&#xff0c;我…

如何保证数据库和缓存双写一致性-----一篇足以

保证数据库和缓存双写一致性的必要性和优点在于确保系统数据的准确性和可靠性。通过双写一致性机制&#xff0c;系统可以防止因为缓存数据与数据库数据不一致而导致的业务错误。这种做法有效降低了系统的脆弱性&#xff0c;提高了数据的完整性。同时&#xff0c;通过缓存加速读…

AI智能分析网关V4烟火检测算法解决方案

一、背景需求 根据国家消防救援局公布的数据显示&#xff0c;2023年共接报处置各类警情213.8万起&#xff0c;督促整改风险隐患397万处。火灾危害巨大&#xff0c;必须引起重视。传统靠人工报警的方法存在人员管理难、场地数量多且分散等问题&#xff0c;无法有效发现险情降低…

部署Tomcat及其负载均衡

简介 在前面已经学习了Nginx服务器的安装配置&#xff0c;本章主要采用案例课的形式介绍Tomcat及NginxTomcat负载均衡群集。Tomcat案例首先介绍其应用场景&#xff0c;然后重点介绍Tomcat的安装配置&#xff0c;NginxTomcat负载均衡群集案例是应用于生产环境下的一套可靠的Web站…

牛仔行头目标检测竞赛 李沐老师Kaggle(有代码有注释)

一、比赛地址 CowBoy Outfits Detection | Kaggle 二、数据介绍 这次比赛的数据集一共有4879个image&#xff0c;需要自己划分训练集和验证集。annotation的格式是json&#xff0c;因此如果用yolo系列的算法会涉及到json2txt这一步。当然如果不用yolo系列的就不要这段代码了。…

[vivado ] report_utilization -name

可以Open Synthesiezed或 Implementation 后的Design使用下面的命令&#xff0c;一定要加-name这个option, 后面的utilization_1可以可以自定义。 report_utilization -name utilization_1

【Python机器学习】分类器的不确定估计——预测概率

predict_proba的输出是每个类别的概率&#xff0c;通常比decision_function的输出更容易理解&#xff0c;对于二分类问题&#xff0c;它的形状始终是(n_samples,2)。 import mglearn.tools from sklearn.ensemble import GradientBoostingClassifier from sklearn.datasets im…

从DETR到Mask2Former(3):masked attention的attention map可视化

Mask2Former的论文中有这样一张图&#xff0c;表示masked attenion比cross attention效果要好 那么这个attention map是怎么画出来的&#xff1f; 在mask2attention的源代码中 CrossAttentionLayer这个类中&#xff0c;在forward_post函数中做如下修改&#xff1a; def forwar…

轴组【CAN】

如果有126个轴&#xff0c;你程序里挨个添加轴很麻烦。 可以用轴组批量添加。【数组】 CAN驱动器 0x164 就是下个驱动器 p_CAN主站地址:ADR(IoConfig_Globals.CANopen_Manager_SoftMotion);p_CAN从站地址1:ADR(IoConfig_Globals.DMA882_CAN);p_CAN从站地址2:ADR(IoConfig_Gl…

重磅!OpenAI正式发布,自定义ChatGPT商店!

1月11日凌晨&#xff0c;OpenAI在官网正式发布了&#xff0c;自定义GPT商店&#xff0c;可以帮助用户找到目前最好用、流行的自定义ChatGPT助手。 在2024年第一季度&#xff0c;OpenAI将启动GPT 开发者收入计划。首先&#xff0c;美国地区的开发者将根据用户对其 GPT 的使用情…

HTML--超链接

超链接 作用&#xff1a;点击跳转到相应位置 a标签 语法&#xff1a; <a href"链接地址">文本或图片</a>范例&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"/><title>跳转到百度</t…

蓝桥杯单片机进阶教程4——需要分配进程的模块

前言&#xff1a; 【蓝桥杯单片机保姆级教学】 https://www.bilibili.com/video/BV1h3411m7Aw/?p117&share_sourcecopy_web&vd_sourcec4fc67867c5218768e783d04475bc5a2 P117-118 比赛的时候也按照这个顺序来写 一、数码管显示 分析考题 &#xff08;1&#xff09;…

大文件上传切片上传

大文件上传&切片上传 简历中如何写项目经验&技术 切片上传相关面试题 基础实现流程 实现核心&#xff1a;秒传 断点续传 切片 …… 如何实现的 最基本的视图 加上拖拽 加上拖拽事件。监听drop事件&#xff0c;event.dataTransfer.files文件对象。其他dragenter dragove…

odoo17基础培训1-odoo开发基础知识准备以及odoo17开发环境安装

odoo17基础培训 一、odoo开发基础知识准备以及odoo17开发环境安装 1、odoo是什么&#xff1f; 当我介绍客户使用odoo系统作为业务管理平台时&#xff0c;有时会被问到Odoo是什么&#xff1f; 简单点&#xff0c;可以这么说&#xff1a; Odoo是一套完整的系统&#xff0c;是…

Pycharm安装numpy库失败解决办法

一、出现错误&#xff08;以matplotlib为例&#xff09;&#xff1a; 二、解决办法&#xff1a; 方法一&#xff08;失败&#xff09;&#xff1a;PyCharm中有一个安装库的方法是&#xff1a;Settings>>Python Interpreter>>点击右侧的加号 第二个图 失败原因&am…

【开源】基于JAVA语言的固始鹅块销售系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 鹅块类型模块2.3 固始鹅块模块2.4 鹅块订单模块2.5 评论管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 鹅块类型表3.2.2 鹅块表3.2.3 鹅块订单表3.2.4 鹅块评论表 四、系统展示五、核心代码5.…

x-cmd pkg | jless - 受 Vim 启发的命令行 JSON 查看器

目录 简介首次用户功能特点类似工具与竞品进一步探索 简介 jless 是一个命令行 JSON 查看器&#xff0c;设计用于读取、探索和搜索 JSON 数据。可以使用它来替代 less 、 jq 、 cat 以及您当前用于查看 JSON 文件的编辑器的任何组合。它是用 Rust 编写的&#xff0c;可以作为单…

确保CentOS系统中的静态HTTP服务器的数据安全

确保CentOS系统中的静态HTTP服务器的数据安全是一项重要的任务&#xff0c;它有助于保护网站免受未经授权的访问、数据泄露和其他安全威胁。以下是一些关键步骤和最佳实践&#xff0c;以确保CentOS系统中静态HTTP服务器的数据安全&#xff1a; 限制访问权限确保只有授权用户可…

Python爬虫---scrapy shell 调试

Scrapy shell是Scrapy提供的一个交互式shell工具&#xff0c;它可以帮助我们进行爬虫的开发和调试。可以使用它来测试xpath或css表达式&#xff0c;查看它们是如何工作的&#xff0c;以及它们从你试图抓取的网页中提取的数据。它允许你在编写spider时交互地测试表达式&#xff…