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

目录

一、标准输入输出

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大厂是怎么做支付系统的流程容错的?

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 1 单据关联 如某些订单域内部的多种单据间存在关联关系一样&#xff0c;支付设计上也有单据间关联设计。如所有逆向过程都须持有正向的单据&#xff0c;因此退款须关联到原来的支付&#…

LTESniffer:一款功能强大的LTE上下行链路安全监控工具

关于LTESniffer LTESniffer是一款功能强大的LTE上下行链路安全监控工具&#xff0c;该工具是一款针对LTE的安全开源工具。 该工具首先可以解码物理下行控制信道&#xff08;PDCCH&#xff09;并获取所有活动用户的下行链路控制信息&#xff08;DCI&#xff09;和无线网络临时…

为了这口醋,包的这饺子。为了Selenium,学有限的CSS,逐步替换XPATH

Learn about CSS rules and pseudo-classes to help you move your XPATH locators to CSS. 1. 最基本IdElement TypeDirect ChildChild or Sub-ChildClass 2. 深入一点Next SiblingAttribute ValuesChoosing a Specific Match Sub-String Matches 3 参考资料 In order for Sel…

Java零基础教学文档第五篇:jQuery

今日新篇章 【jQuery】 【主要内容】 jQuery简介 jQuery安装 jQuery语法 jQuery选择器 jQuery事件处理 jQueryDOM操作 jQuery元素遍历 jQuery过滤 jQuery其它方法 【学习目标】 1.jQuery简介 1.1 jQuery简介 jQuery 库可以通过一行简单的标记被添加到网页中。 1.…

java自动化将用例和截图一起执行测试放入world中直接生成测试报告【搬代码】

1.首先我们得用例写好之后放入文档中&#xff0c;把不用的案例类型、前置条件去掉之后&#xff0c;如图&#xff1a; 放到桌面后&#xff0c;先看执行结果&#xff1a; 直接上代码 package com.znzdh.qitagongju;import jxl.Sheet; import jxl.Workbook; import org.apache…

了解集群,以及集群是什么?

每个集群即一个独立运行的文档数据库&#xff0c;分片集群架构由路由&#xff08;mongos&#xff09;、配置&#xff08;config&#xff09;和分片&#xff08;shard&#xff09;组成。 数据读写请求经mongos分发&#xff0c;通过查询config信息&#xff0c;并行分配到相应sha…

C语言之字符串和指针

目录 用数组实现的字符串和用指针实现的字符串 █用数组实现的字符串str █用指针实现的字符串ptr 注意 用数组和指针实现字符串的不同点 字符串数组 用数组实现的字符串的数组——二维数组 用指针实现的字符串数组——指针数组 注意 字符串和指针有着紧密的联系&#…

力扣(105. 从前序与中序遍历序列构造二叉树,106. 从中序与后序遍历序列构造二叉树)

题目1链接 题目1&#xff1a; 思路&#xff1a;使用前序确定根&#xff0c;使用中序分左右子树&#xff0c;分治法。 难点&#xff1a;如何控制递归确定左右子树。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* T…

【STM32】FLASH闪存

1 FLASH闪存简介 本节所指STM32内部闪存&#xff0c;即下载程序的时候&#xff0c;程序存储的地方。&#xff08;非易失性&#xff09; STM32F1系列的FLASH包含程序存储器、系统存储器&#xff08;bootloader&#xff0c;不允许修改&#xff09;和选项字节三个部分&#xff0…

华西建筑智能化寻找志同道合的创业团队

我今天四十多了&#xff0c;之前也创过业&#xff0c;做软件开发系统集成的。 19年进入华西建筑装饰工程有限公司负责机电安装及弱电智能化版块。后公司成立建筑智能化事业部&#xff0c;我负责。现在想全身心打造施工企业项目管理平台&#xff0c;同时进军智慧康养领域。我想…

1.5矩阵元素的引用

通过下标来引用矩阵的元素 A(3, 2)表示A矩阵第3行第2列的元素。 >> arr [1,2,3;4,5,6]; >> arr(4, 5) 10arr 1 2 3 0 04 5 6 0 00 0 0 0 00 0 0 0 10>> 如果引用元素超过矩阵的大小将自…

Windows下面基于pgsql15的备份和恢复

一、基础备份 1.创建一个文件用来存储备份数据 2.备份指令 $CurrentDate Get-Date -Format "yyyy-MM-dd" $OutputDirectory "D:\PgsqData\pg_base\$CurrentDate" $Command "./pg_basebackup -h 127.0.0.1 -U postgres -Ft -Pv -Xf -z -Z5 -D $O…

Navicat 16 for MySQL:打造高效数据库开发管理工具

随着数据的快速增长和复杂性的提升&#xff0c;数据库成为了现代应用开发中不可或缺的一部分。而在MySQL数据库领域&#xff0c;Navicat 16 for MySQL作为一款强大的数据库开发管理工具&#xff0c;正受到越来越多开发者的青睐。 Navicat 16 for MySQL拥有丰富的功能和直观的界…

功能权限篇

文章目录 1. 如何设计一套权限系统1.1 目标1.2 权限模型1.2.1 模型一RBAC1.2.2 模型二ABAC 2.如何实现菜单的创建&#xff1f;2.1 表结构2.2 前端实现2.3 后端实现 3. 如何实现角色的创建&#xff1f;4.如何给用户分配权限 —— 将菜单赋予角色&#xff1f;5.如何给用户分配权限…

sqlilabs第五十三五十四关

Less-51(GET - GET - Error based - ORDER BY CLAUSE-String- Stacked injection) 手工注入 单引号闭合&#xff0c;和上一关一样堆叠注入解决 自动注入 和上一关一样 Less-52(GET - challenge - Union- 10 queries allowed -Variation 1) 手工注入 这一关开始后面的可以看…

设计模式之备忘录模式【行为型模式】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某…

QT上位机开发(函数运行时间分析)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 软件除了功能开发、debug之外&#xff0c;另外一个很重要的部分就是软件的优化和提高。这里面的优化&#xff0c;当然就是希望软件能够处理更多的数…

[Beego]1.Beego简介以及beego环境搭建,bee脚手架的使用,创建,运行项目

一.Beego介绍 Beego是一个开源的基于Golang的MVC框架&#xff0c;主要用于Golang Web开发,Beego可以用来快速开发API、Web、后端服务等各种应用。 Golang 的Web开发框架有很多,从 github star 数量来看Gin>Beego>lris>Echo>Revel>Buffalo 目前国内用的比较多的就…

在ubuntu平台上安装minecraft

一、获取minecraft启动器安装包 登陆minecraft官网Welcome to the Minecraft Official Site | Minecraft&#xff0c;使用已经购买minecraft的microsoft或者mojang账号登陆。 点击Download Launcher 对于ubuntu系统&#xff0c;使用点击debian版本 此后便会自动下载Minecraft.…

基于pyradiomics影像组学特征提取

基于pyradiomics影像组学特征提取 特征提取&#xff1a;1 pyradiomics的使用&#xff1a;1.1&#xff0c;在python环境下安装pyradiomics:1.2,设置特征提取器&#xff0c;获得想要特征&#xff1a;1.2.1 图像类型1.2.2 目标特征设置1.2.3 特征提取器设置 2 代码示例;参考&#…