(1)C提供了许多控制格式的操纵符.现在通过几个例子来感受一下;
例子1编写一个程序,输入两个数,要求给出竖式运算的结果.
//利用setw()来进行格式控制.#include "iostream"#include "iomanip"#include "string"#include "random"#include "ctime"using namespace std;int main(){cout <> a >> b){cout <
(2)seek与tell是IO库提供的用来定位流中数据的位置的.下面通过一个例子来感受它们的作用。
例子2:假设我们有一个文件,我们现在需要统计第1到第i行的累积字节数目.并且写在文件的末尾.请编写程序实现.我们当然可以将文件扫描一遍保存数据然后在写在文件末尾上,但是这样的效率很低.如果文件的行数很大100万行,那么所需要的内存也会很大.比较好的办法是边读边写,这样效率会提高很多.
//这里需要注意一个细节,原始文件的结尾应该是在有数据的地方再换一行(即下一行的开头).如果不是这样,则会出现bug.现在来分析一下原因.//假设文件的最后一行是j_(_是结束位置),那么我们在写入数据时就会变成这样://j x x x x x.再最后一次读入的时候会将写入的字符也算进去.这是bug1.此外,当我们读入最后一行时,会使得文件达到结束位置,这样流的eofbit就置位了,此时是没有办法对流进行写入的.所以最后一行的数据没有办法写入文件,这是bug2.//如果我们的原始文件是这样//j//_//那么当我们读入最后一行的时候就不会受到新写入数据的干扰,也不会到达文件结束的位置.int main(){fstream is("Text.txt",fstream::ate|fstream::in|fstream::out);auto end_mark is.tellg();is.seekg(0, fstream::beg);//重新定位到开头string line;size_t cnt 0;while (is.tellg() ! end_mark line.size() 1;//记录字节auto cur_mark is.tellg();//保存当前的位置is.seekp(0, fstream::end);//定位到文件末尾is <