<C++学习>C++ 标准库(STD)的输入与输出(I/O)操作教程

C++ 的输入与输出主要通过标准库中的流类实现,包括标准输入流(std::cin)、标准输出流(std::cout)、标准错误流(std::cerr)和文件流(std::ifstreamstd::ofstream)。以下是教程内容,包括基本用法、常见技巧以及文件操作的示例。


1. 标准输入输出流

1.1 std::cout (标准输出)

std::cout 用于将信息输出到控制台。

用法
#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    int number = 42;
    std::cout << "The number is: " << number << std::endl;
    return 0;
}
说明
  • << 是插入操作符,将数据写入输出流。
  • std::endl 用于换行,并刷新缓冲区(相当于 \n + flush)。

1.2 std::cin (标准输入)

std::cin 从控制台获取用户输入。

用法
#include <iostream>

int main() {
    int age;
    std::cout << "Enter your age: ";
    std::cin >> age;  // 从用户输入获取一个整数
    std::cout << "Your age is: " << age << std::endl;
    return 0;
}
说明
  • >> 是提取操作符,用于从输入流中提取数据。
  • 输入会自动跳过空白字符(如空格、换行符)。

1.3 std::cerrstd::clog

  • std::cerr:输出错误消息(不带缓冲)。
  • std::clog:输出日志信息(带缓冲)。
示例
#include <iostream>

int main() {
    std::cerr << "Error: Something went wrong!" << std::endl;
    std::clog << "Log: Application started." << std::endl;
    return 0;
}

1.4 格式化输出

C++ 提供了一些工具来控制输出格式,常用头文件 <iomanip>

示例
#include <iostream>
#include <iomanip>

int main() {
    double pi = 3.14159265358979;

    std::cout << "Default: " << pi << std::endl;

    // 控制小数位数
    std::cout << "Fixed: " << std::fixed << std::setprecision(2) << pi << std::endl;

    // 控制宽度和对齐
    std::cout << "Width: " << std::setw(10) << pi << std::endl;

    return 0;
}
常用工具
  • std::setw(n):设置宽度。
  • std::setprecision(n):设置小数点后位数。
  • std::fixedstd::scientific:固定小数点格式或科学计数法。

2. 文件输入输出

C++ 提供了文件流类:

  • 输入流std::ifstream
  • 输出流std::ofstream
  • 读写流std::fstream

2.1 写入文件

示例
#include <iostream>
#include <fstream>

int main() {
    std::ofstream outfile("output.txt"); // 打开文件(创建新文件或覆盖已有文件)
    if (!outfile) {
        std::cerr << "Error: Cannot open file." << std::endl;
        return 1;
    }

    outfile << "Hello, file!" << std::endl;
    outfile << 42 << std::endl;

    outfile.close(); // 关闭文件
    std::cout << "Data written to file." << std::endl;
    return 0;
}

2.2 读取文件

示例
#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::ifstream infile("output.txt"); // 打开文件
    if (!infile) {
        std::cerr << "Error: Cannot open file." << std::endl;
        return 1;
    }

    std::string line;
    while (std::getline(infile, line)) { // 按行读取文件内容
        std::cout << line << std::endl;
    }

    infile.close(); // 关闭文件
    return 0;
}
说明
  • std::getline() 读取整行,适合处理文本文件。
  • 文件结束时 infile.eof() 会返回 true

2.3 文件读写模式

文件流的打开模式:

  • std::ios::in:读取模式。
  • std::ios::out:写入模式。
  • std::ios::app:追加模式。
  • std::ios::trunc:清空文件内容(默认)。
  • std::ios::binary:二进制模式。
示例:追加内容
#include <iostream>
#include <fstream>

int main() {
    std::ofstream outfile("output.txt", std::ios::app); // 打开文件以追加模式
    if (!outfile) {
        std::cerr << "Error: Cannot open file." << std::endl;
        return 1;
    }

    outfile << "Appending a new line." << std::endl;

    outfile.close();
    return 0;
}

3. 高级功能:文件与流状态检查

3.1 检查文件状态

示例
#include <iostream>
#include <fstream>

int main() {
    std::ifstream infile("nonexistent.txt");
    if (!infile) {
        std::cerr << "Error: File does not exist." << std::endl;
        return 1;
    }
    return 0;
}
常用方法
  • is_open():文件是否成功打开。
  • eof():是否到达文件末尾。
  • fail():流状态是否失败。
  • good():流是否正常。

3.2 异常处理

C++ 文件流支持异常处理,使用 exceptions() 方法启用。

示例
#include <iostream>
#include <fstream>

int main() {
    std::ofstream outfile;
    outfile.exceptions(std::ofstream::failbit | std::ofstream::badbit);

    try {
        outfile.open("readonly.txt");
        outfile << "Attempting to write." << std::endl;
    } catch (const std::ios_base::failure& e) {
        std::cerr << "Exception: " << e.what() << std::endl;
    }

    return 0;
}

4. 综合示例:统计文件中的单词数量

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

int main() {
    std::ifstream infile("example.txt");
    if (!infile) {
        std::cerr << "Error: Cannot open file." << std::endl;
        return 1;
    }

    std::string word;
    int count = 0;
    while (infile >> word) {
        count++;
    }

    std::cout << "Word count: " << count << std::endl;

    infile.close();
    return 0;
}

学习建议与实践

  1. 动手实践

    • 创建简单的文本文件,尝试文件读写操作。
    • 编写小程序,如统计文件字符数、单词数或查找关键字。
  2. 参考文档

    • cplusplus.com
    • cppreference.com

通过掌握输入与输出操作,可以更高效地处理文件和用户交互,是 C++ 编程的重要基础。

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

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

相关文章

OPT: Open Pre-trained Transformer语言模型

摘要 大规模语言模型通常需要数十万计算日的训练时间&#xff0c;展现了在零样本和小样本学习中的显著能力。鉴于其计算成本之高&#xff0c;这些模型在没有大量资本投入的情况下难以复现。对于那些通过API提供的少数模型&#xff0c;研究者无法获取完整的模型权重&#xff0c…

力扣257(关于回溯算法)二叉树的所有路径

257. 二叉树的所有路径 一.问题描述 已解答 简单 相关标签 相关企业 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,null,5…

《OpenCV计算机视觉实战项目》——银行卡号识别

文章目录 项目任务及要求项目实现思路项目实现及代码导入模块设置参数对模版图像中数字的定位处理银行卡的图像处理读取输入图像&#xff0c;预处理找到数字边框使用模版匹配&#xff0c;计算匹配得分 画出并打印结果 项目任务及要求 任务书&#xff1a; 要为某家银行设计一套…

Python学习(三)基础入门(数据类型、变量、条件判断、模式匹配、循环)

目录 一、第一个 Python 程序1.1 命令行模式、Python 交互模式1.2 Python的执行方式1.3 SyntaxError 语法错误1.4 输入和输出 二、Python 基础2.1 Python 语法2.2 数据类型1&#xff09;Number 数字2&#xff09;String 字符串3&#xff09;List 列表4&#xff09;Tuple 元组5&…

系统思考—要素连接

“改变你的思维&#xff0c;就能改变你的世界”— 诺曼皮尔 世界上的所有事物&#xff0c;都在规律的支配下&#xff0c;以系统的方式运转。显性的部分是我们能看到的“要素”&#xff0c;而那些看不见的力量&#xff0c;正是推动系统运作的要素之间的相互作用。更隐秘的&…

云原生(1)

作业&#xff1a; 1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容&#xff0c;不存在则创建一个文件将创建时间写入。 2、写一个 shel1 脚本,实现批量添加 20个用户,用户名为user01-20,密码为user 后面跟5个随机字符。 3、编写个shel 脚本将/usr/local 日录下大…

【IO编程】文件IO的API

这篇文章在 文章&#xff1a;【文件I/O】文件持久化 的基础之上&#xff0c;更进一步的描述了文件IO中更多更详细的API详解。 文件IO 文件IO操作是必须要理解的环节之一&#xff0c;因为 s&#xff1a;套接字文件 &#xff1b;p: 管道文件 —> 都需要通过文件IO来进行打开…

【数据库】Unity 使用 Sqlite 数据库

1.找到需要三个 DLL Mono.Data.Sqlite.dllSystem.Data.dllsqlite3.dll 上面两个dll可在本地unity安装目录找到&#xff1a; C:\Program Files\Unity\Hub\Editor\2022.3.xxf1c1\Editor\Data\MonoBleedingEdge\lib\mono\unityjit-win32 下面dll可在sqlite官网下载到&#xff…

省级-农业科技创新(农业科技专利)数据(2010-2022年)-社科数据

省级-农业科技创新&#xff08;农业科技专利&#xff09;数据&#xff08;2010-2022年&#xff09;-社科数据https://download.csdn.net/download/paofuluolijiang/90028570 https://download.csdn.net/download/paofuluolijiang/90028570 数据 年份、省份、农业科技专利数量…

51单片机——定时器中断(重点)

STC89C5X含有3个定时器&#xff1a;定时器0、定时器1、定时器2 注意&#xff1a;51系列单片机一定有基本的2个定时器&#xff08;定时器0和定时器1&#xff09;&#xff0c;但不全有3个中断&#xff0c;需要查看芯片手册&#xff0c;通常我们使用的是基本的2个定时器&#xff…

计算机的错误计算(二百零九)

摘要 利用两个大模型判断 是否为有理数&#xff1f;其值是多少&#xff1f;由实验知&#xff0c;其中一个大模型判断错误&#xff0c;说不是有理数&#xff1b;至于其值&#xff0c;该大模型选了一个错误的数值。 例1. e^(45*ln(24.8))是有理数吗&#xff1f;其值是多少&am…

Facebook 隐私变革之路:回顾与展望

在数字时代&#xff0c;个人隐私的保护一直是社交平台面临的重大挑战之一。作为全球最大的社交网络平台&#xff0c;Facebook&#xff08;现为Meta&#xff09;在处理用户隐私方面的变革&#xff0c;历经了多次调整与完善。本文将回顾Facebook在隐私保护方面的历程&#xff0c;…

第432场周赛:跳过交替单元格的之字形遍历、机器人可以获得的最大金币数、图的最大边权的最小值、统计 K 次操作以内得到非递减子数组的数目

Q1、跳过交替单元格的之字形遍历 1、题目描述 给你一个 m x n 的二维数组 grid&#xff0c;数组由 正整数 组成。 你的任务是以 之字形 遍历 grid&#xff0c;同时跳过每个 交替 的单元格。 之字形遍历的定义如下&#xff1a; 从左上角的单元格 (0, 0) 开始。在当前行中向…

GitLab CI/CD使用runner实现自动化部署前端Vue2 后端.Net 7 Zr.Admin项目

1、查看gitlab版本 建议安装的runner版本和gitlab保持一致 2、查找runner 执行 yum list gitlab-runner --showduplicates | sort -r 找到符合gitlab版本的runner&#xff0c;我这里选择 14.9.1版本 如果执行出现找不到下载源&#xff0c;添加官方仓库 执行 curl -L &quo…

机器学习基础-机器学习的常用学习方法

目录 半监督学习的概念 规则学习的概念 基本概念 机器学习里的规则 逻辑规则 规则集 充分性与必要性 冲突消解 命题逻辑 → 命题规则 序贯覆盖 单条规则学习 剪枝优化 强化学习的概念 1. 强化学习对应了四元组 2. 强化学习的目标 强化学习常用马尔可夫决策过程…

docker安装rabbit后访问报错最佳的几种解决方案

错误通常是由于RabbitMQ的安全配置导致的&#xff0c;RabbitMQ默认配置允许的用户仅能通过localhost访问。这通常出现在RabbitMQ的guest用户上&#xff0c;guest用户默认只能从localhost登录&#xff0c;而无法从其他IP地址进行远程访问。 解决方法&#xff1a; 1. **创建一个…

26个开源Agent开发框架调研总结(2)

根据Markets & Markets的预测&#xff0c;到2030年&#xff0c;AI Agent的市场规模将从2024年的50亿美元激增至470亿美元&#xff0c;年均复合增长率为44.8%。 Gartner预计到2028年&#xff0c;至少15%的日常工作决策将由AI Agent自主完成&#xff0c;AI Agent在企业应用中…

第 32 章 - Elasticsearch 的应用场景与技术解决方案

思维导图 0. 简介 Elasticsearch 主要应用于搜索场景。场景的如 应用内的搜索框、还有日志搜索等。 下面将介绍 Elasticsearch 在开发中的常见应用场景。 1. 日志搜索 日志搜索是最常见的应用。 其组合技术为&#xff1a;Kafka、Logstash、Elasticsearch、Kibana 该组合整体…

VsCode对Arduino的开发配置

ps&#xff1a;我的情况是在对esp32进行编译、烧录时&#xff0c;找不到按钮&#xff0c;无法识别Arduino文件&#xff0c;适合已经有ini文件的情况。 1.在vscode中安装拓展 2.打开设置&#xff0c;点击右上角&#xff0c;转到settings.json文件 3.复制以下代码并保存 {"…

python学opencv|读取图像(三十二)使用cv2.getPerspectiveTransform()函数制作透视图-变形的喵喵

【1】引言 前序已经对图像展开了平移、旋转缩放和倾斜拉伸技巧探索&#xff0c;相关链接为&#xff1a; python学opencv|读取图像&#xff08;二十八&#xff09;使用cv2.warpAffine&#xff08;&#xff09;函数平移图像-CSDN博客 python学opencv|读取图像&#xff08;二十…