C++流操作
C++流的使用
每次使用完流,记得要关闭,虽然有时候并不是必须的.
streamname.close();
重定向
在Linux终端或者Windows命令提示符模式下,使用重定向可以改变输入源和输出源
~$ program '<'input.filetype >output.filetype #去掉多余的''
在Linux和Unix下,'>' '<'默认是标准输出和标准输入,'2>'则是标准错误(即std::cerr)
输出流
1. ostream类提供了 put() 和 write() 方法用来输出
cout.put('W'); //输出字符W,可以拼接使用就像重载之后的 '<<'
cout.write("Candy Bob",5); //输出第一个参数的第二个参数个长度
2. 刷新输出缓冲区可以有两种方法,原理都是重载 '<<'
前者与后者的差别就在与后者刷新缓冲区后多了一个换行操作
cout << "Show Now!" << flush; //相当于flush(cout);
cout << "Show Now!" << endl;
3. 可以通过流操作修改现实的进制, 默认十进制,十六进制,八进制
int n = 100;
cout << n << endl;
//八进制
cout << oct << n << endl;
//十六进制
cout << hex << n << endl;
//这种作用是持久的,在不用的时候记得转换回来
dec(cout); //代表转换为十进制 cout << dec;同样适用
4. 我们可以调整字段宽度来达到美观,但C++有一种数据完整大于美观的理念,所以即使你设置了字段宽度,一旦超过还是会
打乱阵型,以保证数据的完整性.
cout.fill('*');//使用'*'填充空白,注意此为持久的.
for(int i = 0;i < 100;i*=10)
{
cout.width(5);
cout << i << ":";
cout.width(8);
cout << i * i << endl;
}//注意,width()方法并不是持久的,也就是说每次排版都需要使用一次该方法.
5. 浮点数的使用
cout.precision(2);//设置浮点数的精度为2,C++默认六位精度,但不显示末尾的0.
cout.setf(ios_base::showpoint);//显示末尾的零
输入流
cin检查输入: 当读取到的流和指定的类型不符合的时候,不符合的流中的数据被保留,留待下一次读取.并返回flase
可以使用while语句进行判断
int input, sum;
while(cin >> input)
sum += input;
当流由于输入不匹配失败时,发生的问题十分复杂,简述为位设置问题,使用下列代码恢复
while(cin >> input)
sum += input;
if(cin.fail() && !cin.eof())
{
cin.clear(); //重置流状态,但此时还是有残余留在流中
while(!isspace(cin.get()))//丢弃那些残留在流中妨碍下一次输入的不符合的输入
continue; //头文件 cctype
}
cin >> input; //现在可以继续输入了
字符串的输入:get(char*, int)
和 getline(char*, int)
get读取少于第二个参数减1个或遇见换行符,并将换行符留在流中,getline则将换行符抽取并丢弃
get(char*, int, char)
和 getline(char*, int, char)
第三个参数则是分界符,读取到分界符号时停止读取.
Written on March 19, 2015