首页 > 编程语言 >C++prime之输入输出文件

C++prime之输入输出文件

时间:2023-11-04 20:44:05浏览次数:45  
标签:prime 输出 字节 输入输出 cin C++ char 缓冲区 fin

作为一种优秀的语言,C++必然是能操作文件的,但是我们要知道,C++是不直接处理输入输出的,而是通过一族定义在标准库中的类型来处理IO的。

‘流’和‘缓冲区’

‘流’和‘缓冲区’

C++程序把输入输出看作字节流,并且其只检查字节流,不需知道字节来自何方。

管理输入包括两步:将流与输入去向的程序关联起来;将流与文件连接起来。

图示:
file
通常使用缓冲区可以更高效地处理输入输出。缓冲区是用作中介的内存块,它是将信息从设备传输到程序或者次程序传递到设备的临时存储工具。

缓冲方法:

从磁盘上读取大量信息,将这些信息存储在缓冲区中,然后每次从缓冲区里读取一个字节,因为从内存中读取单个字节的速度比从硬盘上读取快很多,所以这种方法更快,也更方便。当然,代打缓冲区尾部的时候,程序将从磁盘上读取另一块数据。

(图示)
file

在输出的时候,程序首先填满缓冲区,然后把整块数据传输给硬盘,并清空缓冲区。这被称为“刷新缓冲区”

Tips:当我们按下回车键的时候会刷新缓冲区的。

一些补充:
file

重定向

标准输入和输出通常连接着屏幕与键盘,但也可以通过‘输入重定向与输出重定向改变’。
file

但是注意,cerr与clog不会被重定向,错误仍然在屏幕显示。

使用cout进行输出

"<<"在ostream类重新定义,重载为输出。对于每种数据类型,ostream类都提供了operator<<()函数的定义
file

其他ostream方法:cout是调用方法的对象,put()是类成员函数。和"<<"运算符函数一样,该函数也返回一个指向调用对象的引用,因此也可以用它拼接输出。

cout.put('I').put('t')

刷新输出缓冲区

如果程序使用 cout 将字节发送给标准输出,情况将如?由于stream类对 cout对象处理的输出进行缓冲,所以输出不会立即发送到目标地址,而是被存储在缓冲区中,直到缓冲区填满。然后,程序将刷新 (flush)缓冲区,把内容发送出去,并清空缓冲区,以存储新的数据。通常,缓冲区为 512字节或其整数倍。当标准输出连接的是硬盘上的文件时,缓冲可以节省大量的时间。毕竟,不希望程序为发送512个字节,而存取磁盘 512次。将512个字节收集到缓冲区中,然后一次性将它们写入硬盘的效率要高得多。

在屏幕输出时候,程序不必等到缓冲区被填满。(图示)
file

cin进行输入

跳过空白,空格,换行,制表符等

其他istream类方法

get(char &)与get(void)提供不跳过空白单字符输入功能。

get(char,int,char)和getline(char,int,char)读取整行。

文件输入与输出

要写入文件,创建一个ofstream对象,并使用ostream方法,如<<插入运算符或write()

要读取文件,创建一个ifstream对象,并使用istream方法,如>>运算符或get( )
file

打开多个文件

ifstream fin;
fin.open("fat.txt")
...
fin.close();
fin.clear();
fin.open("rat.txt")
...
fin.close()

文件模式

string类的输入
 //C风格
char info[100]
cin>>info;
cin.getline(info,100)
cin.get(info,100)

//string 对象
string stuff;
cin>>stuff;
getline(cin,stuff)

本文由博客一文多发平台 OpenWrite 发布!

标签:prime,输出,字节,输入输出,cin,C++,char,缓冲区,fin
From: https://www.cnblogs.com/xiaocrblog/p/17809765.html

相关文章

  • 与c++比较学习rust3-2:数据类型
    rust的文章在数据类型数据类型标量类型整形,浮点型,布尔型,字符整形c++rustgoint8_ti8int8int16_ti16int16int32_ti32int32int64_ti64int64-i128-intisizeintunsignedintusizeuintuint8_tu8uint8uint16_tu16uint16ui......
  • 同余方程(扩展欧几里得)(C/C++)
    ax%b=1,则a和b的最大公约数一定是1。#include<cstdio>#include<iostream>usingnamespacestd;inta,q;intx,y;voidexgcd(inta,intb){ if(b==0) { x=1; y=0; return;//得到gcd(b,0)时到达边界值 }// else { exgcd(b,a%b); intk=x; x=y; y=k-......
  • 【UEC++游戏案例】向上的小松饼
    一.效果与资源准备1.1游戏演示效果效果:00-课程演示_哔哩哔哩_bilibili  1.2游戏资产素材与源码素材与源码:提示信息-SiKi学院|SiKi学堂-unity|u3d|虚幻|ue4/5|java|python|人工智能|视频教程|在线课程  1.3前期准备创建无初学者内容的空项目将素材文......
  • C/C++连接mysql(api接口方法详解)
      前言本篇记录C/C++连接mysql利用mysql的api接口的方法:这个方法的代码基本上很久都没有变过了,这里做个笔记来简单学习一下,还有一种方法等有时间了解后再来更新使用API的方式连接,需要先做环境配置,加载mysql的头文件和lib文件。可以看我之前的一篇文章VS中C/C++访问MySQL数据......
  • 图解C/C++灵魂:指针变量
    1、指针变量的基本操作基本操作inta,*iptr,*jptr,*kptr;iptr=&a;jptr=iptr;*jptr=100;kptr=NULL;图解:1.1己址和己空间指针变量也是一个变量,对应一块内存空间,对应一个内存地址,指针名就是己址。这空内存空间多大?一个机器字长(machineword),32位的......
  • 与c++比较学习rust3-1:变量和可变性
    rust文章:变量和可变性let,const这两个在c++中,没有与let相同的用法,letlet有点像constauto1.1.相同点:不需要指定类型。使用了constauto之后,不能改变值也不能改变类型。1.2.不同点:rust合法,c++中不合法(即c++中,不能重复定义一个变量)leta=2;leta=4;le......
  • 【每日例题】蓝桥杯 c++ 串的处理
    串的处理题目题目描述在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下: 1.把每个单词的首字母变为大写。 2.把数字与字母之间用下划线字符(_)分开,使得更清晰3.把单词中间有多个空格的调整为1个空格。输入描......
  • 【每日例题】蓝桥杯 c++ 最大降雨量
    最大降雨量题目本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。由于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨。这个法术需要用到他手中的49张法术符,上面分别写着1至49这49个数字。法术—共持续7周,每天小明都要使用—张法术符,法术符不能......
  • 【每日例题】蓝桥杯 c++ 最小的或运算
    最小的或运算题目问题描述给定整数a,b,求最小的整数工,满足a|a=ba,其中|表示或运算。输入格式第—行包含2个正整数a,b.输出格式输出共1行,包含1个整数,表示最终答案。样例输入样例输出评测数据规模对于所有测评数据,0<a,b<264.最小的或运算思路分析1.要求最小的x满足a|x=b|x,......
  • 【每日例题】蓝桥杯 c++ 奖学金
    奖学金题目蓝桥杯奖学金题目分析由题目可知,该题涉及到五个属性:学号,语文分数,数学分数,英语分数,总分;由于我们需要通过输入语文、数学、英语分数,经过操作后,输出学号与总分,所以我们可以通过结构体进行存储。       下面是有关结构体的信息:结构体信息   2.......