?!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1. 逗号表达?/strong>
首先计算每一个操作数Q然后返回最双的操作数最为整个操作的l果Q因此while(cin >> ival, !cin.eof())看重的只是!cin.eof(),而对前边的cin>>val不关心?/p>
2. 条g状?/strong>
状态由eof, bad, fail, good指示Q如果eof, bad, failM一个ؓtrue那么监状态ؓ错误状态;相反都ؓfalseQ则good为true.
其中badbit标志着pȝU的故障Q是不可回复的,如果出现这U情况,通常׃能l用了Qfailbit标志着是可恢复的,可以修正。eofbit在遇到文件结束符时设|,此时q设|了failbit.
clear()和setstate()用于改变条g成员的状态。clear()条仉设ؓ有效状态(eof, bad, fail|ؓfalseQgood|ؓtrueQ?setstate()把某个特定的设为有效状态?/p>
3. cin
E序的输入都建有一个缓冲区Q即输入~冲区。一ơ输入过E是q样的,当一ơ键盘输入结束时会将输入的数据存入输入缓冲区Q而cin函数直接从输入缓冲区中取数据。正因ؓcin函数是直接从~冲区取数据的,所以有时候当~冲Z有残留数据时Qcin函数会直接取得这些残留数据而不会请求键盘输?
注意
输入l束条gQ遇到Enter、Space、Tab键,会把他们d到输入缓冲区Q但是处理的时候会丢弃掉?/p>
cin >> val 的返回值是cinQ?卛_|同样cout<<valq回左值coutQ,q样可以把cin >> val1; cin >> val2 合ƈ为cin>>val1>>val2;
4. ignore函数
作用Q提取输入字Wƈ丢弃他们?/p>
函数原型Qistream& ignore (streamsize n = 1, int delim = EOF)
d到前n个字W或在读qn个字W进E中遇到delim字符停止,把读取的q些东西丢掉?/p>
案例Q?/p>
复制代码
#include <iostream>
#include <fstream>
#include <sstream>
#include <limits>
#include <stdexcept>
#include <typeinfo>
using namespace std;
int main()
{
int val1, val2;
while(1)
{
cin >> val1;
cin.ignore(5, '9');
cin >> val2;
cout << "val1:" << val1 << endl;
cout << "val2:" << val2 << endl;
}
}
复制代码
q行l果
注意Q如果读了n个字W,后面q个正好是停止字W,那么都读出来q掉Q例子的最后一个)Q?/strong>
numeric_limits<streamsize>::max() 此时d的ؓ最大长度,已经没有界限Q只能靠停止W终止。本例中为‘\n’,即从回R后开始读?/strong>
5. Z必须有ignore()函数
cin.clear()把failbit位清Ӟ但是错误的输入(不是指回车)q是在缓冲区Q每ơ一读错误就做相同的处理Q如果没有ignore(),那么当输入错误时Q就会无限@环。ƈ且还不是单的cin.ignore(),默认的ؓignore(1, '\n')Q这样会D输入几个错误的字W@环几ơ,例如
while(cin >> val, 1)
{
cout << "hello " << endl;
cin.clear();
cin.ignore();
}