[c++ primer plus]使用标准流格式化输入

 标准流常用有.good(), .bad(), .fail(), .eof()成员函数,可以执行它们查看状态。如果发生错误可以执行.clear()清除。

1. cin >> x 用作输入

int  i, j;
cin 
>>  i  >>  j;

从控制台输入时,变量与变量之间的间隔可以靠'/n', '/t', '/r', '/f'等识别出来,从而把输入值送入到不同的变量中。这个间隔的识别与Perl的%s相同。这种分界的间隔就是:将其作为参数调用isspace()时,返回true的字符,即0x09~0x0D, 0x20。

如果输入的格式与要求的不一致,如cin >> i; 输入“aa",那么cin会发生状态错误。

2. getline()用作输入

cin.getline( char *  pch,  int  nCount,  char  delim  =   ' /n '  );

读取一行数据,并从标准流中抛弃回车换行符。如果读取是空行(只有回车换行符),则cin状态成功,只是
pch读符号为空。
   
    getline(istream& cin, string& str, char delim = '/n');
    getline既可以作为cin的成员函数,也可以作为全局函数,把数据从cin中读到string中。保持两个版本的原因是:在引入string类之前,c++就有了istream类。在设计istream时,考虑到了char, double, int和其它基本类型,有相应的类方法(成员函数)。但是对于string,getline(cin, string& str, char delim = '/n'),cin >> string,等都是采用友元实现的。友元函数调用是当然采用全局的方式。

3. get()用作输入

cin. get char *  pch,  int  nCount,  char  delim  =   ' '  );
读取一段数据(以换行符结束一次读取),且不从标准流中抛弃回车换行符。如果读取的是空行
(只有回车换行符),则cin状态出错。
int   get (); &
istream
&   get char &  rch );
读取一个字符,这两个函数可以用来读取
' ' ,cin状态不出错。可以跟在get( char *  pch,  int  nCount, 
char  delim  =   ' ' )后面,以跳过 ' ' 字符。

4. istream的类型转换函数

while  ( ! cin.fail())
{
    
int i;
    cin 
>> i;
    cout 
<< i;
}

istream有到bool型的类型转换函数,上面的函数可以写为:
while  (cin)    //  while successful
{
    
int i;
    cin 
>> i;
    cout 
<< i;
}

这样比
! cin.fail()或 ! cin.eof()更通用,因为它可以检查到其它错误,但不能定位具体哪一类具体原因。

5. How to use ifstream::get() like fscanf()?

转换一下,然后用sscanf或fscanf读取?
int sscanf( const char *buffer, const char *format [, argument ] ... );
int fscanf( FILE *stream, const char *format [, argument ]... );
或者,直接使用 >> 读取
ifstream >> xx;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值