C++流类输入/输出

C++ Primer Plus学习(十六)——输入、输出和文件 输入、输出和文件输入和输出coutcin文件输入和输出内核格式化 输入和输出 cout cin 文件输入和输出 内核格式化 阅读详情

在C++中,数据流动的方法一共有四种:

  1. 标准输入输出stdio.h
  2. 在输入输出流类文件iostream.h中定义流对象
  3. 插入运算符:<<
  4. 提取运算符:>>

<<和>>就是我们最常见的cout << endl;或者cin >> str;,我们把cout比作输出设备,如屏幕,cin比作输入设备,如键盘。这些操作符也就在我们一直用的头文件#include <iostream>中。

有一点要说的是,我们在输入一句话中带有空格时,是不能使用cin >> str;的,因为cin在等待读取的过程中,一是遇到回车键返回,二则是遇到空格就返回。所以可以使用另一种方法:cin.get(str,size);

下面只介绍我们常用的文件输入/输出流。

一、文件打开/关闭

1.建立流

流一共有三种:

  • 输入流 ifstream
  • 输出流 ofstream
  • 输入/输出流 fstream

打开一个文件,我们使用open函数

open函数原型:

	void open(char *filename, int mod, int access);
  • filename不用提,大家都懂。

  • mod是文件打开的工作模式。
    对于输入流ifstream,默认是ios::in;对于输出流ofstream,默认是ios::out。

modexplain
ios::app输出时,追加到文件尾部
ios::ate寻找文件尾部
ios::in文件可输入
ios::nocreate不创建,就是说文件不存在时返回失败
ios::noreplace不替换,就是说文件存在时返回失败
ios::out文件可输出
ios::trunc使同名文件被删除
ios::binary二进制形式打开
  • access是打开文件的类型
整型文件类型
0普通文件
1只读文件
2隐藏文件
3系统文件
4备份文件

如:

	out.open("test",ios::out,0);

fstream的两种方式打开,如:

	io.open("test",ios::out | ios::in,0);

当然,前文也说到过,对于ifstream,默认是输入流,ofstream是输出流,所以我们只想打开普通文件时,没有必要这么做。因为我们在执行默认操作时,使用构造函数也是同样的。

	ifstream in("test");

三种文件的方式可以互相借鉴,但是之间并不绝对。如果在目录下没有指定文件,fstream和istream都会执行失败,因为它们没有主动创建文件的步骤。

而ofstream则有判断出该文件不存在,就建立的特性。

二、文件读写

首先,我们建立一个txt文件,写入以下内容:

I am a PC!
Hello world!
你好!

1.读

先看读的代码

#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, const char * argv[]) {
    ifstream in("/Users/yucheng/test.txt");
    if(!in)
    {
        cout << "not found" << endl;
        return 0;
    }
    char str[100];
    in >> str;
    cout << str << endl;
    return 0;
}

运行后,猜猜看会显示什么?
·
·
·
·
·
·
答案是

I

我们想象一下,把in看成cin,那么是不是相当于我们在键盘输入的过程呢,在遇到空格或回车停止读取!

所以,我们可以使用

	in.get(str,100);
	//或者
    in.getline(str, 100);

来读取一行
·
·
·

如果要读取全部字符,包括回车符、换行符等。

	char s;
    in.get(s);
    while(!in.eof())
    {
        cout << s;
        in.get(s);
    }

2.写

写主要分为两种,
一是格式化写
二是加在尾端写

#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, const char * argv[]) {
    ofstream out("/Users/yucheng/test.txt");
    if(!out)
    {
        cout << "bcz" << endl;
        return 0;
    }
    char str[100] = "I like this place!\n你好";
    out << str;
    return 0;
}

执行完毕后可发现它默认是格式化书写的

书写的函数接口还有

  • put、get函数,它们是更细节化的char字符类型的获取及写入;
    char ch;
    
    while(!f.eof())
    {
        f.get(ch);
        cout << ch;
    }
    char str[] = "hello world!";
    char * p;
    
    for(p = str ; *p!='\0'; p++)
        f.put(*p);

注意的是,如果你的put字符数量不如文件中原字符数量,容易造成字符混插。

因为在使用get和put函数时,并没有将文件格式化。所以,C++又为我们提供下面两种方法,更为简洁。



  • getline(),get();函数
    其原型是basic_istream& getline(char_type* __s, streamsize __n)

根据其本身意思也能猜到这是读取整行的字符。包括get函数

        f.getline(str,1000);
        cout << str << endl;

所以需要每行每行依次处理字符时,这就很方便。不用判断每行有多少字符。


  • read(char &, length),write(char &, length);
    char str[100];
    f.read(str, 100);
    cout << str << endl;
    char str[100]="hello world!";
    f.write(str, 100);

那么,我们只希望在文档末端加上字符,就需要在构造函数或者open函数里申明ios::app就可以了!

	ofstream out("/Users/yucheng/test.txt",ios::app);
	//或者
	out.open("/Users/yucheng/test.txt",ios::app);

并且,可以根据需要读取的字符串或者整形数字的大小来决定读取位数。

如:

	int num;
	char str[100]="";
	f.read((char *)&num,sizeof(int));
	f.read(str,100);
	cout << num << endl << str << endl;

3、文件指针

文件指针函数有两个:

  • seekg(pos); ——输入文件
  • seekp(pos); ——输出文件

还有两种进阶函数

  • seekg(pos,origin); ——输入文件
  • seekp(pos,origin); ——输出文件

pos就是指针的位置偏移量,origin是起始位置

pos可为正、也可为负。正时往右偏移,负时往左偏移。

origin有以下三种

origin意思
ios::beg文件开头
ios::cur文件当前位置
ios::end文件末端
    f.seekp(3);
    f >> str;
    cout << str;

源文件是:1234567890
输出:4567890

9、掌握C++输入输出(I/O)基础知识 本文详细介绍了C++输入输出(I/O)的基础知识,包括标准输入输出、文件操作、字符串流、格式化输出、随机访问以及资源管理等内容。通过丰富的代码示例和流程图,帮助读者掌握C++ I/O的核心概念,并提供实际应用场景的示例,助力开发者编写高效、可靠的程序。 阅读详情

相关推荐

Flink CDC 1.18.1 Oracle 数据同步到postgresql

8、修改Flink的配置文件,主要是各种服务的绑定地址,默认为localhost,统统改为0.0.0.0,如:rest.address: 0.0.0.0 #localhost。将flink-sql-connector-oracle-cdc-3.0.1.jar复制到flink-1.18.1/lib目录中。6、下载 flink-connector-jdbc-3.1.1-1.17.jar,postgresql-42.7.3.jar。7、安装postgresql就不说了,相信你已经有了数据库了。

ynzhangyao的专栏 1799

C++文件流关于读到空格停止

C++ 文件

qq_25097487的博客 7318

使用FileZilla在武汉大学IGS数据分析中心下载GNSS数据

2.依次点击如下图标下载到本地并解压安装(按系统选择要下载的版本)

qq_43381998的博客 6041

ifstream用法

>>只能读取输入数值,不能读取输入字符或者字符串。 getline的参数只能是char*,不能是string。 从文件中读取格式化字符串(格式化输入)sscanf,或者用正则表达式。否则,只能自己写代码,用字符串处理实现。 sscanf在vs2017中需要用sscanf_s代替。格式字符串类型说明:https://en.cppreference.com/w/cpp/io/c/fs...

novanova2009的博客 8225

避坑指南:RK3588视频编码与SRT推流实战中,我遇到的5个典型问题及解决方案

本文深度解析RK3588平台视频编码与SRT推流实战中的五个典型问题,包括MIPI摄像头内存对齐、多线程数据传递、FFmpeg时间戳设置、SRT连接参数调优及系统资源监控。提供具体解决方案和优化技巧,帮助开发者高效实现实时视频网络传输。

weixin_28718793的博客 324

散户渡劫指南:从炼气期到化神期的量化之路

经常有人问我普通人怎么学习量化交易,我就在想怎么学了量化就不是普通人了吗,可能他的意思是类比修仙,量化素人如何修炼进阶,今天就将量化学习每个阶段均对标修仙境界的核心能力与心法要诀一一介绍,助你从“交易凡人”蜕变为“量化金仙”。

木头大左的博客 1338

关于流输入输出的一些用法(包括ifstream文末空格问题)

缓冲区 缓冲区是一块内存区域,在输入输出设备和CPU之间,用于暂存数据,在C++输出输出中,具体表现在屏幕是否会立刻输出数据。 #include <iostream> using std::cout; using std::endl; using std::cerr; #include <ctime> int main() { char* pbuffer=new cha...

hxm的博客 963

从零开始:使用Verilog在FPGA上实现8051微控制器的完整指南

8051微控制器是一种8位微控制器,由Intel在1980年代初推出。它包括一个CPU、一些RAM和ROM、I/O端口、定时器和串行通信接口。由于其简单的架构和强大的功能,8051已经成为了嵌入式系统设计的首选。FPGA是一种集成电路,设计师可以按照自己的需求进行编程。与传统的ASIC(应用特定集成电路)相比,FPGA提供了更高的灵活性,允许在硬件级别进行快速原型设计和迭代。这里,我们定义了一些基本的输入/输出端口,如时钟clk、复位reset、数据输入/输出和地址输入/输出。

qq_38334677的博客 1332

C++中利用文件输入对象(即ifstream对象)来读取文本文件中带空格的字符串以及混合输入数字与字符串

学习C有段时间了,但是C++刚开始学,在看到文件操作时遇到了读取文本文件中带空格的字符串的问题。现总结如下:ifstream类定义的对象用法与cin非常相似,连类中的方法都很相似,假设定义 ifstream inFile;比如:cin>>ch与inFile>>ch;cin.get()与inFile.get()以及cin.getline()与inFile.getline()的用法基本相同,最重要的是

Zkangsen的博客 6172

华为OD技术面八股文_C++_01

汇总华为OD技术面C++方向八股文真题,并提供详细解答。

qq_45776114的博客 1887

YOLOv4目标检测算法——通俗易懂的解析

YOLOv4目标检测算法——通俗易懂的解析

chase 7135

(C++)输入/输出流

1、输入/输出概念 c++将输入输出分为三类: 标准I/O 文件IO 字符串IO //fstream 文件流,使用需要调用库函数:read(); write();等 //ifstream 文件输入流, 将内容存储到文件中;相当于fstream 调用 write(); //ofstream 文件输出流, 将文件内容输出,调入内存;相当于fstream 调用 read(); 2、标准输入流 #include <iostream> using namespace std..

weixin_53812805的博客 3372

基于Spring Boot + Vue 3构建高并发华为数码商城交易平台:全栈架构设计与实现

内容将涵盖系统架构、数据库设计、核心模块开发(用户、商品、订单、购物车)、安全认证、性能优化以及前后端分离部署等关键环节,并提供详尽的代码示例,旨在为开发者提供一个可落地的企业级项目实战指南。<el-button text class="button" @click.stop="addToCart(product)">加入购物车</el-button>.antMatchers("/api/user/login", "/api/user/register").permitAll() // 公开接口。

2201_76125393的博客 306

C++文件输入输出流及标准I/O流类知识总结

在学习使用C++进行STL模型文件的读写与显示时,遇到了一些文件读取的问题,在网上找了很多资料,有些写的比较模糊,自己也遇到了很多坑,在参考以前大神的资料基础上,C++文件流及I/O流相关知识进行了一些总结。 转载请注明出处: C++所有的输入输出流(I/O)都是基于stream流类,包括iostream,fstream,stringstream等,其对象称为流对象,其之间的相互关系如下: ...

不想不努力的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C++的输入和输出

C++语言本身不提供输入与输出的操作,但是可以使用标准库提供的输入与输出功能,即程序中独立于设备的 I/O 操作。 输入与输出包括: 标准的输入输出(标准 I/O),即对系统指定的标准设备的 I/O 操作。用 cin 和 cout 从键盘输入数据,结果输出到显示器屏幕。 文件的输入输出(文件 I/O),即以外存中的文件为对象进行输入和输出。包括从磁盘文件输入数据,或将数据输出到磁盘文件。 ...

肥羊汤 4845

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C++I/O流——(1)I/O流的概念

C++I/O流——(1)I/O流的概念

一个正在学习C/C++的博主 1267

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

《C++ Primer Plus》第17章:输入、输出和文件(1)

C++输入和输出概述

weixin_40064300的博客 876

C++之输入输出流

输入输出流:1. I/O(输入/输出)流类库提供对象之间的数据交互服务 流类库预定义了一批流对象,连接常用的外部设备 程序员可以定义所需的I/O流对象,使用流库提供的工作方式 实现数据传输2.流类和流对象: 程序中,对数据的输入/输出是以字节流实现的 应用程序对字节序列作出各种数据解释 I/O系统的任务就是在内存和外部设备之间稳定可靠地传输数据 和解释数据。 流类对象可...

atr82275的博客 155

C++输入/输出流类库

转载地址:http://blog.youkuaiyun.com/lijun5635/article/details/38349081 C++的基本流类体系 流类体系 整个流类体系是一个派生类体系,如下图所示。 图 输入/输出流类派生体系 按ANSI C++标准,类ios是抽象类,它的析构函数是虚函数,它的构造函数为保护的,作为所有基本流类的基类。VC++中有一个构造函数i

凡人浪子 705

C++重新认知:流概念

为:其中的每个枚举常量规定一种文件打开的方式,在定义文件流对象和打开文件时使用。3)

Rain_ZZX的博客 824

【C++高阶】深入理解C++ I/O流:标准库中的隐藏宝石

在编程的世界中,输入与输出(I/O)是连接程序与现实世界的桥梁。无论是从键盘接收用户指令,还是将处理结果输出到屏幕或文件,I/O操作都是程序设计中不可或缺的一部分。对于C++这一强大而灵活的编程语言而言,其丰富的I/O流库更是为开发者提供了高效、灵活且易于使用的数据交换机制

EterNity_TiMe_的计算机学习之路 2361

STL(三)C++ I/O流技术

C++标准模板库中,提供了一组模板类和相应的具现类,来支持面向对象的数据输入输出功能,如基本的输入输出流istream类/ostream类/iostream类和文件输入输出流ifstream类/ofstream类/fstream类等。 一、I/O流类   使用C++的I/O流类,需要用宏语句"#include " or "#include "。   由于支持单字节和多字节的字符数据读写,C+

Just for fun的专栏 764

C++ Stream(流)

C++流概述 在程序设计中,数据输入/输出(I/O)操作是必不可少的,C++语言的数据输入/输出操作是通过I/O流库来实现的。C++中把数据之间的传输操作称为流,流既可以表示数据从内存传送到某个载体或设备中,即输出流,也可以表示数据从某个载体或设备传送到内存缓冲区变量中,即输入流。 C++流涉及以下概念: 标准I/O流:内存与标准输入输出设备之间信息的传递; 文件I/O流:内存与外

zdy0_2004的专栏 1万+

C++学习初探---C++的基本输入输出。

事情的起因是复现一道羊城杯2023的vm_wo,题目中的虚假控制流,虽然解那道题可以不用去除,但是遇到了不学就很难受。好的学一下虚假控制流,那都看虚假控制流了;OLLVM总要一起看了吧,那都已经学到这里不能只看个皮毛吧;学一下实现原理吧,研究一下源码吧;好的就研究一下源码,打开来好嘟看不懂源码,C++和llvm啊。那不就只可以学一下C++了o(╥﹏╥)o,学吧学吧都得学。因为有C基础,so只是总结一下学习记录。

Sciurdae的博客 185
上一篇: C++基本类型互转(string、char[]、int)
下一篇: Mac端 Qt(qmake)从txt到程序的方法
巨蟹贼香
博客等级 码龄9年 76粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值