C++学习5 IO输入输出

本文围绕C++的IO输入输出展开,介绍了iostream、fstream、sstream三种主要类型,提及宽字符类型支持。强调IO对象不能拷贝、传递和返回,可使用引用。还讲解了查询流状态、fstream的自动构造析构及文件打开模式等内容。

C++学习5 IO输入输出

简单IO流拾遗

首先,有关IO流的输入输出主要包括三个方面:

  1. iostream,也就是读写流的基本类型,一般用于再控制台的输出输入。
  2. fstream,基于对文件的输入输出,用于读取写入文件
  3. sstream,读写内存string对象的类型

此外,为了支持宽字符的显示和读取,C++支持一种wchar_t类型,即wcin对应cin,wcout对应cout。还比如fstream下包括ifstream和wifstream两种类型。
当然,由于继承和多态的特性,istringstream与wistream都是继承自istream,因而都可以实现基类的操作。因而本笔记下面不做区别。

下面是对IO对象进行处理的时候的几点注意:

  1. IO对象不能被拷贝
  2. IO对象不能作为形参被传递,也不能作为函数的返回值。但是我们可以使用引用方式传递和返回流。
  3. IO传递和返回的引用不能是const的,因为其再读写的过程中会发生改变。

注意,一个IO输入输出很有可能发生错误,再第280页给出了一个流对象的一些方法,用来实现对该流对象是否发生错误的访问。当一个流对象产生错误时,该对象后续的输入输出即会停止而无效,因为一般常常将其作为条件判断:

while(cin>>words)
{
//......
}

下面给出一个例子,即一个接受输入流作为参数、返回一个输入流的函数:

istream& ReadInput(istream& s)
{
    string A;
    while (s >> A, !s.eof())
    {
        if (s.bad())
            throw runtime_error("IO流错误");
        if (s.fail())
        {
            cerr << "数据错误,请重试" << endl;
            s.clear();
            s.ignore(100, '\n');
            continue;
        }
        cout << A << endl;
    }
    s.clear();
    return s;

查询流的状态:

可以使用rdstate来返回一个iostate类型的值从而实现查询流的状态,其中每一位的布尔值都表示一种特殊的效果,这里就不一一列举。

关于缓存器的输出和刷新常常使用endl,ends,flush等放在输出流的末尾,也使用unitbuf和nounitbuf来控制是否每一次都进行flush操作,不详细展开。

fstream

首先给出一些基本的操作:

fstream f; //创建一个未绑定的文件流对象
fstream f(filename);//创建一个fstream对象并打开文件filename,其中filename可以是string类型,也可以是char数组。
fstream f(filename, mode);// 以一定的方式打开文件

f.open(filename);
f.close();
f.is_open();    //这三个较为常用,就不解释

对于一个已经打开的文件,我们同样可以判断其是否打开成功。常用的方法是:

ofstream out;
out.open(filename);
if(out)
{
......
}

自动构造和析构

即这些构造和析构的过程都是隐式的。
例如:

for (auto p=argv+1;p!=argv+argc;++p)
{
    ifstream f(*p);
    if(f)
        process(f);
    else
        cerr<<""<<endl;
}

以上代码中没有用到open,也没有使用close(),但是每次都会自动的调用这两个函数。

mode of filestream

例如:

  1. in 以只读模式打开
  2. out 以写模式打开
  3. app 每次写操作前均定位到文件末尾
  4. ate 打开文件后立即定位到文件末尾
  5. trunc截断文件 ??????
  6. binary 以二进制方式进行IO

这几种模式之间的制衡关系见第286页。

注意:
除非指定其为app模式,否则ofstream流的文件被打开后文件里之前的内容将会消失(很好理解)。

string流

这一部分emmmmmmm还是略掉吧。感觉用处一般般。 = =!

转载于:https://www.cnblogs.com/liangzid/p/10910126.html

多角色体系 支持管理员、商家、消费者三种角色,权限分级管控: 管理员:负责平台整体配置、用户审核、数据监控等全局操作。 商家:管理店铺信息、发布商品、处理订单、回复评价等。 消费者:浏览商品、加入购物车、下单支付、评价商品等。 实现用户注册(手机号 / 邮箱验证)、登录(支持密码 / 验证码 / 第三方登录)、个人信息管理(头像、收货地址、密码修改)。 权限精细化控制 商家仅能管理自家店铺及商品,消费者仅能查看和购买商品,管理员拥有全平台数据访问权限。 二、商品管理功能 商品信息维护 商家可发布商品:填写名称、分类(如服饰、电子产品)、子类别(如手机、笔记本)、规格(尺寸、颜色、型号)、价格、库存、详情描述(图文)、物流信息(运费、发货地)等。 支持商品上下架、库存调整、信息编辑,系统自动记录商品状态变更日志。 商品分类与搜索 按多级分类展示商品(如 “数码产品→手机→智能手机”),支持自定义分类体系。 提供智能搜索功能:按关键词(名称、品牌)搜索,支持模糊匹配和搜索联想;结合用户浏览历史对搜索结果排序(优先展示高相关度商品)。 商品推荐 基于用户浏览、收藏、购买记录,推荐相似商品(如 “浏览过该商品的用户还买了…”)。 首页展示热门商品(销量 TOP10)、新品上架、限时折扣等推荐列表。 三、订单与交易管理 购物车与下单 消费者可将商品加入购物车,支持修改数量、选择规格、移除商品,系统自动计算总价(含运费、折扣)。 下单流程:确认收货地址→选择支付方式(在线支付、货到付款)→提交订单→系统生成唯一订单号。 订单处理流程 订单状态跟踪:待支付→已支付→商家发货→物流运输→消费者收货→订单完成,各状态变更实时通知用户。 商家端功能:查看新订单提醒、确认发货(填写物流单号)、处理退款申请(需审核理由)。 消费者端功能:查看订单详情、追踪物流、申请退款 / 退货、确认收货。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值