输入输出流&文件操作

这篇博客介绍了C++中如何进行输入输出重定向,包括将标准输出重定向到文件和从文件中读取输入。同时,讨论了iostream库中的相关函数,如eof()、peek()和ignore(),以及流操纵算子如setprecision和setw。还展示了如何使用fstream进行文件的创建和读写操作,并给出了实例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

输入输出

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

输出重定向

使得标准输出定向到某文件

#include<iostream>
using namespace std;
int main()
{
    int x,y;
    cin>>x>>y;
    freopen("test.txt","w",stdout);
    //将标准输出重定向到text.txt文件
    //文件在当前该源代码在的目录下
    if(y==0)
        cerr<<"error."<<endl;
        //调试的错误信息,通过cerr输出在CMD上
    else
        cout<<x/y;
    return 0;
}

输入重定向

#include<iostream>
using namespace std;
int main()
{
    double f;
    int n;
    freopen("test.txt","r",stdin);
    //cin被重定向为test.txt中读取数据
    //若文件不够值输入,则输出缺省值0;
    cin>>f>>n;
    cout<<f<<" "<<n<<endl;
    return 0;
}

判断输入流结束

while(cin>>x)
{
    //1.如果从文件输入,则读到文件尾部,输入流就算结束
    //2.键盘输入,则在单独一行输入Ctrl+Z代表输入流结束
}
//在istream是将这个cin的值,强行转换类型为bool

istream类的成员函数

  • getline(char* buf,int buf size,char delim)-读取一行

delim是分隔符,当读入数据读到delim字符,就自动结束

delim的缺省值是\n

该函数会自动在buf中读入数据的结尾添加’ \0 ’

  • bool eof() :判断输入流是否结束

  • int peek() :返回下一个字符,但不带走,就是看一下是啥

    cin.peek()

  • istream& putback(char c):将字符ch放回到输入流

    读出来了觉得后悔,可以塞回去

  • istream& ignore(int nCount=1,int delim=EOF):

    从流中删掉最多nCount个字符,遇到EOF时结束

流操纵算子控制输出格式

  • 流操纵算子:#include< iomanip >

    • 整数流的基数:流操纵算子dec / oct / hex / setbase

      • 设置进制 十进制 / 十二进制 / 十六进制 /
    • 浮点数的精度(precision / setprecision)

      • 保留多少位小数

      • cout.precision(5)

      • 功能相同:

        • 指定输出浮点数的有效位数(非定点方式输出)

          非定点方式输出:指小数点不一定在个位数

        • 指定输出浮点数的小数点后的有效位数(定点方式输出)

    • 设置域宽(setw,width)

      • 等效于%04d(要求有多少个位置,补什么等
    • 用户自定义的流操纵算子

  • 非定点方式输出

在这里插入图片描述

  • 定点方式输出

在这里插入图片描述

  • 取消固定的输出格式

在这里插入图片描述

  • 输入输出设定域宽
    在这里插入图片描述

综合例子

在这里插入图片描述

在这里插入图片描述

文件读写

创建文件

//创建文件
#include<fstream>
using namespace std;
int main()
{
    ofstream outFile("clients.dat",ios::out|ios::binary);
    //创建文件
    /*  clients.dat -要创建的文件的名字
        ios::out    -文件打开方式
            ios::out    -输出到文件,删除原有内容
            ios::app    -输出到文件,保留原有内容,总是在尾部添加
        ios::binary -以二进制文件格式打开文件
    */
}
//创建文件
#include<fstream>
using namespace std;
int main()
{
    ofstream fout;//可以先创建一个ofstream对象,再用open函数打开
    fout.open("test.out",ios::out|ios::binary);

    //判断打开是否成功
    if(!fout)
        cout<<"File open error!"<<endl;
    
    //文件名可以给出绝对路径,也可以给出相对路径
    //不交代路径信息,缺省情况下,在当前文件夹下找文件
}

在这里插入图片描述

读入例子

#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    vector<int> v;
    ifstream srcFile("in.txt",ios::in);
    ofstream destFile("out.txt",ios::out);
    int x;
    while(srcFile>>x)
        v.push_back(x);
    sort(v.begin(),v.end());
    for(int i=0;i<v.size();i++)
        destFile<<v[i]<<" ";//把元素写入的操作
    destFile.close();
    srcFile.close();
    //!!!把文件打开之后,一定要记得,把文件关闭
    //防止在缓冲区,未能成功写入
    return 0;
}

二进制文件读写

ifstream 和 fstream的成员函数:

istream& read(char * s,long n)

将文件读指针指向的地方的n个字节内容,读入到内存地址s,然后将文件都指针向后移动n字节

以ios::in方式打开文件时,文件读指针开始指向文件开头

istream& write(const char s,long n)*

写入文件

在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Caaaaaan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值