ignore,putback,peek文件

※标准流的设备名

标准流的设备名.png

※成员函数ignore

#include<iostream>
using namespace std;
int main()
{
    string s;
    cout<<"请输入一串字符串";
    //1.忽略输入缓存区中的前8个字符 
    //2.在前8个字符中存在结束字符,那么就忽略 
    //输入缓冲区 结束字符 之前的字符 
    cin.ignore(8,' ');//设置' '为结束字符 
    cin>>s;
    cout<<"string s="<<s<<endl;
    return 0; 
}

运行结果:


1.PNG

※成员函数putback

#include<iostream>
using namespace std;
int main()
{
    char ch;
    cin.putback('a');
    cout<<"请输入一个ch数据:";
    cin>>ch;
    cout<<"string ch="<<ch<<endl;
    return 0; 
}


运行结果:

3.PNG

※成员函数peek

#include<iostream>
using namespace std;
int main()
{
    int i;
    string s;
    //输入缓冲区中第一个字符 
    cout<<"strart"<<endl;
    char ch=cin.peek();//没有数据的时候,等待用户输入 
    cout<<"end"<<endl;
    if((ch>='0')&&(ch<='9'))
    {
        cin>>i;//"123abc"   i=123
        cout<<"int i="<<i<<endl;
    }
    else
    {
        cin>>s;
        cout<<"string s="<<s<<endl;
    }
}


运行结果:


2.PNG

**※整数流的基数:流操纵算子dec、oct、hex和setbase **

**整数通常被解释为十进制(基数为10)整数。如下方法可改变流中整数的基数: **

  • 插人流操纵算子hex可设置十六进制基数(基数为16)、
  • 插人流操纵算子oct可设置八进制基数(基数为8)、
  • 插人流操纵算子dec可恢复十进制基数。
    **用流操纵算子setbase来改变基数,使用setbase或其他任何参数化的操纵算子都必须在程序中包含头文件iomanip
    如果不明确地改变流的基数,流的基数是不变的 **
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int i=11;
    cout<<hex<<i<<" "<<dec<<i<<endl;//11转换为16进制变成b,在转换成十进制变成11
    cout<<setbase(8)<<i<<endl;//变成八进制
    return 0; 
}

运行结果:

1.PNG

※设置浮点数精度(precision、setprecision)

可以用流操纵算子setprecision或成员函数percision控制小数点后面的位数。

  • 设置了精度以后,该精度对之后所有的输出操作都有效,直到下一次设置精度为止。
  • 无参数的成员函数percision返回当前设置的精度。
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    double roof2=3.141592666;
    for(int places=0;places<=9;places++)
    cout<<setprecision(places)<<roof2<<'\\n' ;
    return 0; 
}

运行结果:


2.PNG

※设置域宽(setw、width)

  • 成员函数ios.width设置当前的域宽(即输入输出的字符数)并返回以前设置的域宽。
  • 如果显示数据所需的宽度比设置的域宽小,空位用填充字符填充。
  • 如果显示数据所需的宽度比设置的域宽大,显示数据并不会被截断,系统会输出所有位。
  • 域宽设置仅对下一行流读取或流插入操作有效,在一次操作完成之后,城宽又被置回0
  • 未对所处理的输出数据提供足够的域宽时,输出数据将按需要的域宽进行输出,有可能产生难以阅读的输出结果。
例题1:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int t1[5]={12345,1,3333,33,7777};
    int t2[5]={12,4,67,54645,653};
    for(int i=0;i<5;i++)
    {
        cout.width(6);//设置宽度 类型,作用相当于\\t
        cout<<t1[i];
        
    }
    cout<<endl;
    for(int j=0;j<5;j++)
    {
        cout.width(6);
        cout<<t2[j];
        
    }
    cout<<endl;
}

例题1:
运行结果:

3.PNG
例题2:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    char n[30]={0};
    cin.width(5);
    while(cin>>n)
    {
        cout<<"n="<<n<<endl;
        cin.width(5);
        
    }
    return 0;
}

例题2:
运行结果:


1.PNG

※用户自定义的流操纵算子

#include<iostream>
#include<iomanip>
using namespace std;
ostream& tab(ostream& output)//作用相当于\\t
{
    return output<<'\\t';
}
int main()
{
    cout<<'a'<<tab<<'b'<<'\\t'<<'c'<<endl;
    return 0;
}

运行结果:

output.PNG

※cin.good

#include<iostream>
#include<iomanip>
using namespace std;
#include<limits>
int main()
{
    int a;
    int b;
    cin>>a;
    cout<<"a="<<a<<endl;
    cout<<"cin1="<<cin.good()<<endl;//检查cin是否损坏 
    if(!cin.good())
    {
        cin.clear();//修复cin 
        cin.sync();//清除输入缓存区内的所有数据 Windows下的 
    //  cin.ignore(numeric_limits<streamsize>::max(),'\\n');清除输入缓存区内的所有数据 Linus下的 
    }
    cout<<"cin2="<<cin.good()<<endl;
    cin>>b;
    cout<<"b="<<b<<endl;
    return 0;
}

运行结果:


4.PNG

文件

文件打开
  • 使用构造函数打开
    创建流对象时直接打开文件
    eg: ofstream ofile(const char *filename, openmode);
  • 使用成员函数open打开文件
    eg: ofstream ofile;
    ofile.open(const char *filename, openmode)
  • 文件类的默认打开方式
    打开文件时,没有指定打开模式时,使用默认的打开方式;
    ofstream: ios::out | ios::trunc
    ifstream: ios::in
    fstream: ios::in | ios::out
    对于ifstream 的流对象在打开文件时即使指定的模式中没有显示的标明ios::in 模式,ios::in 标识也一直存在
    对于ofstream 的流对象打开的文件即使指定的模式中没有显示的标明ios::out 模式,ios:;out 标识也是一直存在的
    ---------------------------------------------------------------------------------------------------- openmode 文件打开模式
  • ios::in 输入(读)模式打开文件
  • ios::out 输出(写)模式打开文件
  • ios::app 追加模式打开文件
  • ios::trunc 若文件已经存在则清空文件的模式打开文件
  • ios::binary 二进制方式打开文件
    这些标识可以单独使用,也可以组合使用,中间用”或“ 运算符 ”|“ 间隔。
    fstream file;
    file.open(“example”, ios::out | ios::app | ios::binary);

文件关闭

当文件的读写操作完成之后,我们必须将文件关闭以使文件重新变为可访问的。关闭文件时需要调用成员函数close( ),它负责将缓存中的数据排放出来并关闭文件。
这个函数一旦被调用,原来的流对象就可以被用来打开其他的文件了,这个文件也可以重新被其他的进程访问了。

include<fstream>

fstream file;
file.open(“example”, ios::out | ios::app | ios::binary);
if(file !=NULL) {
cout<<“open failed”<<endl;
}
//……. 文件操作
file.close();

在文件中输入
#include<iostream>
#include<iomanip>
using namespace std;
#include<fstream>
int main()
{
    ofstream ofile("zyz1");//打开文件
    ofile<<"pear"<<" "<<4.5;//在文件中输入
    ofile.close();//关闭文件
    return 0; 
} 

读文件内容:
#include<iostream>
#include<iomanip>
using namespace std;
#include<fstream>
int main()
{
    ifstream ifile("zyz1");
    char sztext[20];
    double price;
    ifile>>sztext>>price;
    cout<<sztext<<" "<<price;
    ifile.close();
    return 0; 
} 

运行结果:


5.PNG

以二进制的形式在文件中存储

文件write
#include<iostream>
#include<iomanip>
using namespace std;
#include<fstream>
int main()
{
    ofstream ofile("zyz2.txt",ios::out|ios::binary);
    char temp[20]="nihao";
    ofile.write(temp,20);
    ofile.close();
    return 0; 
} 

文件read
#include<iostream>
#include<iomanip>
using namespace std;
#include<fstream>
int main()
{
    ifstream ifile("zyz2.txt",ios::in|ios::binary);
    char temp[20];
    ifile.read(temp,20);
    cout<<temp<<endl;
    ifile.close();
    return 0; 
} 

运行结果:


1.PNG
流指针相关函数
  • tellg( )和 tellp( )
返回一个pos_type类型,即整数,分别代表当前读指针(get) 和 写指针(put) 的位置
  • seekg( pos_type position ) 和 seekp( pos_type position )
    流指针被改变为指向文件开始计算的一个绝对位置,传入的参数类型与函数tellg 和 tellp 的返回值类型相同
  • seekg( offset, seekdir) 和 seekp( offset, seekdir)
    从由参数seekdir 设定的位置开始计算一个位移 offset,其中seekdir的值可以是: ios::beg(流开始的位置),ios::cur(流当前的位置),ios::end(流末尾的位置)
#include<iostream>
using namespace std;
#include<fstream>
int main()
{
    ofstream ofile("exam1.txt",ios::out|ios::binary);
    char temp[20]="nihao";
    ofile.write(temp,20);
    ofile.close();
    
    ifstream ifile("exam1.txt");
    if(NULL==ifile)
    {
        cout<<"打开文件失败"<<endl;
        return -1;
    }
    //定位函数 -get 指针(读指针) 
    ifile.seekg(0,ios::end);
    //指针位置函数 -get指针(读指针) 
    cout<<"get point position:"<<ifile.tellg()<<endl;
    ifile.close();
    return 0; 
} 

运行结果:

2.PNG
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • C/C++输入输出流总结 前两天写C++实习作业,突然发现I/O是那么的陌生,打了好长时间的文件都没有打开,今天终...
    LuckTime阅读 1,662评论 0 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • C++基础 IO和文件操作 标准输入输出的设备名有哪些 文件输入类的类名是:iostream 输出流注意事项计算顺...
    I踏雪寻梅阅读 574评论 0 1
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,447评论 1 51
  • 第一章 计算机与C++编程简介 C++程序6个阶段编程 ->预处理->编译->连接->装入->执行1.程序在编译器...
    rogertan30阅读 3,488评论 0 1