C++之I/0流操作(标准流、文件流、二进制操作等)

2023-10-29

流(stream)为C++的输入输出操作提供了许多的便利,通常我们使用的流是std::out用于输出,使用std::cin用于接收用户的输入,除此之外,C++还提供了文件流用于实现文件的读写操作,字符串流用于进行字符串的操作。

标准输入输出

头文件:#include<iostream>
返回值:是流对象,可以当bool类型使用
函数:按行读取 getline(流对象, string对象

//标准输入输出
#include <iostream>
#include <string>
using namespace std;
int main()
 
    string str;
    cin >> str;//按空格换行符tab键分割
    cout << str << endl;
    while (getline(cin, str))//返回值为流对象,可以当作bool类型使用
    {
        if (0 == str.compare("quit"))//或者"quit" == str
        {
            break;
        }
        cout << str << endl;
    }
    cout << "退出成功!" << endl;
    return 0;
}


文本文件输入输出

头文件:#include<fstream>

文件类型

• 文本文件:文件以文本中的ASCII码形式存储在计算机中
• 二进制文件:文件以文本中的二进制形式存储在计算机中,用户一般不能直接读懂

文件打开方式

打开方式 解释
ios::in 为读文件而打开文件
ios::out 为写文件而打开文件
ios::ate 初始位置:文件尾
ios::app 追加方式写文件
ios::trunc 如果文件存在先删除,再创建
ios::binary 二进制方式

注意:文件打开方式可以配合使用,利用|操作符
例如:用二进制写文件 ios::binary | ios::out

写文件

写文件步骤:
方法一:

  1. 头文件 #include
  2. 创建流对象 ofstream ofs;
  3. 打开文件 ofs.open(“文件路径”,打开方式);
  4. 打开文件并判断文件是否正确打开 ifs.open(“文件路径”,打开方式);
  5. 写数据 ofs<<“写入的数据”;
  6. 关闭文件 ofs.close();

方法二:创建流对象并打开文件:ofstream ofs(“文件路径”, 打开方式);

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    ofstream ofs;
    ofs.open("1.txt", ios::out);//以文本写模式打开或者创建文件
    //方式二  ofstream ofs("1.txt", ios::out);创建流对象并且打开文件
    
    if (!ofs.is_open())//判断是否打开成功 true-成功 false-失败
    {
        cout << "创建或者打开文件失败" << endl;
    }
    ofs << "写入数据" << endl;
    ofs.close();
    return 0;
}


在这里插入图片描述

读文件

读文件步骤:

  1. 头文件 #include
  2. 创建流对象 ifstream ifs;
  3. 打开文件 ifs.open(“文件路径”,打开方式);
  4. 判断文件是否正确打开 ifs.open(“文件路径”,打开方式);
  5. 读数据 四种方式读取
  6. 关闭文件 ofs.close();
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
    ifstream ifs;
    ifs.open("1.txt", ios::in);//以文本读方式打开文件
    if (!ifs.is_open())
    {
        cout << "打开文件失败" << endl;
    }
 
    //方法一
    string buffer;
    while (ifs >> buffer) //读的数据以空格换行符tab分隔
    {
        cout << buffer << endl;
    }
 
 
    //方法二
    while (getline(ifs, buffer))//以行的形式读取
    {
        cout << buffer << endl;
    }
    
    //方法三
    char c;
    while ((c = ifs.get()) != EOF)//一次读取一个字符,读到EOF停止
    {
        cout << c;
    }
 
    //方法四
    char b3[100] = { 0 };
    while (ifs.getline(b3, 100)) //一次读取100个字节
    {
        cout << b3 << endl;
    }
    ifs.close();//关闭文件
    return 0;
}

二进制文本输入输出

写文件

二进制写文件主要利用流对象成员函数write
函数原型:ostream& write(const char * buffer, int len);
第一个参数:字符指针buffer指向内存中的一段空间
第二个参数:读写的字节数
在这里插入图片描述

读文件

二进制读文件主要利用流对象成员函数read
函数原型:istream& read(char * buffer, int len);
第一个参数:字符指针buffer指向内存中的一段空间
第二个参数:读写的字节数
在这里插入图片描述

字符串输入输出

头文件:#include<sstream>

往流里面输出

#include <sstream>
#include <iostream>
using namespace std;
int main()
{
    ostringstream s;
    s << 10;
    cout << s.str() << endl;//无参 打印
    s.str("");//给空字符串   清空
    s << 5.9;
    cout << s.str() << endl;
    return 0;
}

从流里面读出

int main()
{
    //如果这个字符串严格按照空格(空白字符)分隔就可以获取
    istringstream stream("10 20 nihao");
    int a;
    int b;
    string str;
    stream >> a >> b >> str;
    cout << a << "\t" << b << "\t" << str << endl;
    return 0;
}


格式控制

头文件:#include
可直接查表

#include <iomanip>//格式控制头文件
int main()
{
    cout << setiosflags(ios::right) << setw(7) << 1 << endl;//设置宽度为7,右对齐
    cout << resetiosflags(ios::right);//取消对齐方式
    cout << setfill('.') << setw(30) << endl;//宽度设置为30,填充'.'输出
    cout << setfill(' ');//恢复填充为空格
    cout << setiosflags(ios::showpos) << 1 << endl;//强制在正数前加+
    cout << resetiosflags(ios::showpos);//取消强制正数前加+
    cout << setiosflags(ios::showpoint) << 1.2 << endl;//强制显示小数点后的无效0
    cout << resetiosflags(ios::showpoint);//取消强制显示小数点后的无效0
    cout << setiosflags(ios::scientific);//科学计数法
    cout << resetiosflags(ios::scientific);//取消科学记数法
    cout << setprecision(18);//精度为18,正常为16
    cout << setprecision(6);//恢复为6
 
    cout << oct << 15;//输出为八进制数
    cout << hex << 20;//输出为十六进制数
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++之I/0流操作(标准流、文件流、二进制操作等) 的相关文章

  • C# 打印问题(RichTextBox)

    我想打印我的 RichTextBox eintragRichTextBox 的内容 我现在有这个代码 private void druckenPictureBox Click object sender EventArgs e PrintD
  • json.net自定义jobject反序列化

    我正在尝试使用 JsonConvert DeserializeObject string 将字符串反序列化为可与动态一起使用的 jobject 来动态访问 json 文档 但是我想避免知道文档的大小写 以便我可以输入 dynamic doc
  • 您可以从基本 Win32 控制台模板应用程序中的 C#/Winrt 组件调用(不是 WinForm/abstractions/wrappers 或使用 C++/Winrt 模板)吗?)

    我有一个现有的程序 win32 x86 控制台应用程序 需要调用托管代码 来自 Net 的 C dll The dll不暴露给 COM 但可以从 C WinRT 组件调用并由 C WinRT 控制台模板应用引用 BUT即使安装了 C Win
  • Poco c++Net:Http 从响应中获取标头

    我使用 POCO C Net 库进行 http 我想尝试制定持久缓存策略 首先 我认为我需要从缓存标头中获取过期时间 并与缓存值进行交叉检查 如果我错了 请告诉我 那么我如何从中提取缓存头httpResponse 我已经看到你可以用 Jav
  • 为什么 F# 的默认集合是排序的,而 C# 的不是?

    当从 C 世界迁移到 F 最惯用的可能 思维方式时 我发现了这个有趣的差异 在 C 的 OOP mutable 世界中 默认的集合集合似乎是HashSet https learn microsoft com en us dotnet api
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • 如何制作可启动程序?

    所以 这个问题可能看起来很奇怪 但假设我编译了 int main void int x 3 int y 4 int z x y 是否可以让CPU这样运行 如何 例如 这允许我写入监视器吗 如果我没记错的话 内存中有些地方可以写入要显示的内容
  • C# 开源 NMEA 解析器 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 C 开源 NMEA 解析器 嗯 我自己也不熟悉 但是一些快速搜索显示了一个代码项目 htt
  • C# 编译器不会优化不必要的强制转换

    前几天 在写答案的时候这个问题 https stackoverflow com questions 2208315 why is any slower than contains在这里 关于溢出 我对 C 编译器感到有点惊讶 它没有按照我的
  • UI 函数在快速事件完成之前触发

    我有一个停靠在 Silverlight 应用程序中的 Web 浏览器框架 有时会在其上弹出全窗口 XAML Silverlight UI 元素 我已经或多或少修复了一个老问题 即 Web 框架的内容似乎与 Silverlight 内容不能很
  • 如何在三个 IEnumerable 上使用 Zip [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Linq 从 3 个集合创建项目 https stackoverflow com questions 5284315 create items from 3 collections using
  • 搜索实体的所有字段

    我正在尝试在客户数据库上实现 多功能框 类型的搜索 其中单个查询应尝试匹配客户的任何属性 这是一些示例数据来说明我想要实现的目标 FirstName LastName PhoneNumber ZipCode Mary Jane 12345
  • 从BackgroundWorker线程更新图像UI属性

    在我正在编写的 WPF 应用程序中 我有一个 TransformedBitmap 属性 该属性绑定到 UI 上的 Image 对象 每当我更改此属性时 图像就会更新 因此显示在屏幕上的图像也会更新 为了防止在检索下一张图像时 UI 冻结或变
  • Project Euler #8,我不明白我哪里出了问题[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在做项目欧拉第八题 https projecteuler net problem 8 其中我得到了这个大得离谱的数字 7316
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • .NET 4 的条件编译[重复]

    这个问题在这里已经有答案了 可能的重复 条件编译和框架目标 https stackoverflow com questions 2923210 c sharp conditional compilation and framework ta
  • 选择查询不适用于使用Parameters.AddWithValue 的参数

    C 中的以下查询不起作用 但我看不出问题所在 string Getquery select from user tbl where emp id emp id and birthdate birthdate cmdR Parameters
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl
  • 结构化绑定的用例有哪些?

    C 17 标准引入了新的结构化绑定 http en cppreference com w cpp language structured binding功能 最初是proposed http www open std org jtc1 sc

随机推荐

  • Mac下安装rocketMQ

    一 前提是电脑上已经安装了JDK 没有安装的参照 https jingyan baidu com article 908080221f3cfefd91c80fbf html 二 RocketMQ的下载与安装 下载 官网地址 http roc
  • 利用windows服务器自带的IIS搭建网站并发布公网访问【内网穿透】

    文章目录 1 前言 2 Windows网页设置 2 1 Windows IIS功能设置 2 2 IIS网页访问测试 3 Cpolar内网穿透 3 1 下载安装Cpolar 3 2 Cpolar云端设置 3 3 Cpolar本地设置 4 公网
  • Ocaml 对偶、元组

    1 对偶 元组 Ocaml语言中 构造乘积类型的操作符是 类型A和类型B的乘积类型记 A B 构造乘积类型的元素的操作符是逗号 如果a属于类型A b属于类型B 那么 a b 属于类型A B 二元乘积类型的元素称为对偶 多元乘积类型中的元素称
  • 浅谈C++函数重载

    C 相较于C语言来说 重载是一重大特性 让我们一起简单的回顾一下重载那些事 传送门 函数重载是什么 为什么有函数重载 函数重载是如何实现的 总结 函数重载是什么 函数重载 是函数的一种特殊情况 C 允许在同一作用域中声明几个功能相似的同名函
  • uniapp中图片宽度100%,高度自适应

    uniapp中图片宽度100 高度自适应
  • EditText限制只能输入汉字字母和空格

    这是第一次使用正则表达式来实现输入框限制输入类型 场景是项目中个人信息模块中的姓名字段只能要求输入这些类型 之前只是用其他的方式实现过其他类型的限制输入 这次想到这个方法边让同事帮忙写了个正则 对于正则我可真是心有余而力不足 希望能够帮到大
  • Ajax简介

    目录 Ajax简介 Ajax特点 基础语法 数据编码格式 form表单中 Ajax中 ajax携带数据 回调函数 序列化 响应状态码 Ajax简介 AJAX 全称Asynchronous JavaScript And XML 即异步JS和X
  • react hooks组件间的传值方式(使用ts),子孙传值给祖先组件

    父子组件传值 参考 react hooks组件传值 父传子很简单 只要父组件传参 子组件写好interface childProps和props去接收即可 子传父稍复杂 父组件写一个回调函数 changeTaskState id any g
  • AIGC,驱动架构与业务的新动力

    本期CCF TF第117期 AIGC 驱动架构与业务的新动力 活动由CCF TF架构SIG承办 新浪协办 邀请到了科大讯飞 阿里云 去哪儿网 新浪微博等多位互联网技术专家 共同分享交流如何通过应用AIGC技术 驱动架构和业务高效发展 为工程
  • 【满分】【华为OD机试真题2023 JS】数字加减游戏

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 数字加减游戏 知识点广搜 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 小明在玩一个数字加减游戏 只使用加法或者减法 将一个数字s变成数字t 每个回合 小明可以
  • 修复VMware网络连接失败及设置固定IP

    最近被这个网络折磨疯了 记录一下怎么修复虚拟机网路连接 VM软件安装好后 就有10个网络连接类型可供选择 分别是 VMnet0 VMnet1 VMnet2 VMnet3 VMnet4 VMnet5 VMnet6 VMnet7 VMnet8
  • 数据库操作:汇总数据(聚集函数)

    我们经常需要汇总数据而不用把它们实际检索出来 为此MySQL提供了专门的函数 聚集函数运行在行组上 计算和返回单个值的函数 SQL聚集函数 1 AVG 返回某列的平均值 2 COUNT 返回某列的行数 3 MAX 返回某列的最大值 4 MI
  • java数组及数组函数

    数组求和 1 System out println 1 2 3 4 5 getSum 1 2 3 4 5 5个参数 public static int getSum int numbers 可变长形参 本质为数组 int sum 0 for
  • 服务器系统要用GUID还是MBR,分享win10分区格式MBR和GUID有什么区别 教你区分MBR和GUID格式...

    今天IT天空小编要给大家分享下最新的教程 电脑装win10系统需要选择正确的分区格式 这样电脑才能保持正常运转 如果格式安装错误 电脑就没办法继续运行了 一般情况下 win10分区格式MBR和GUID两种选择 那么这两者有何区别 电脑小白肯
  • 华为ensp,实战案例一一使用模拟器构建局域网络

    1 案例目标 I 通过组网设计 掌握小型网络的组建 路由的设计 对小型网络系统进行分析 提出建网解决方案 2 综合运用路由 VLAN的相关技术 3 综合运用VLAN创建 Access和Trunk接口配置 VLAN间路由配置 DHCP 也址池
  • 民族代码设计

    民族代码和对应民族名称 在开发时 设计民族的数据字典 民族代码 民族名称 01 汉族 01 汉族 02 蒙古族 03 回族 04 藏族 05 维吾尔族 06 苗族 07 彝族 08 壮族 09 布依族 10 朝鲜族 11 满族 12 侗族
  • 基于遗传算法的BP神经网络优化算法(matlab实现)

    1 理论基础 1 1 BP神经网络概述 BP网络是一类多层的前馈神经网络 它的名字源于在网络训练的过程中 调整网络的权值的算法是误差的反向传播的学习算法 即为BP学习算法 BP算法是Rumelhart等人在1986年提出来的 由于它的结构简
  • Scanner 类

    目录 1 什么是Scanner类 2 创建Scanner类的基本语法 3 使用next方法 4 使用nextLine方法 5 next 与nextLine 6 数据类型的接收方式 7 Scanner类知识扩展 8 今日箴言 1 什么是Sca
  • JAVA代码规范

    一 MyBatis 不要为了多个查询条件而写 1 1 二 迭代entrySet 获取Map 的key 和value 三 使用Collection isEmpty 检测空 四 初始化集合时尽量指定其大小 五 若需频繁调用Collection
  • C++之I/0流操作(标准流、文件流、二进制操作等)

    目录 标准输入输出 文本文件输入输出 文件类型 文件打开方式 写文件 读文件 二进制文本输入输出 写文件 读文件 字符串输入输出 往流里面输出 从流里面读出 格式控制 流 stream 为C 的输入输出操作提供了许多的便利 通常我们使用的流