您的位置:首页 > 编程语言 > C语言/C++

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

2007-10-22 12:22 309 查看
标准流常用有.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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐