C++ 输入输出和文件
来源:互联网 发布:mac 导入图片位置 编辑:程序博客网 时间:2024/06/05 16:06
C++ 输入输出和文件
本文主要包含如下内容:
- C 输入输出和文件
- 缓冲区
- cout输出格式控制
- 计数系统格式
- setf设置
- 头文件iomanip
- cin输入格式控制
- 流状态
- 文件的输入与输出
- 文件模式
- 随机存取
缓冲区
缓冲区是内存中的临时储存工具,是程序与文件或其他I/O设备之间的桥梁。可以帮助匹配信息传递的速度。
信息在缓冲区和程序之间传输时,是逐字节传输的。信息在缓冲区和文件之间传输时,是以大块数据的方式进行传输。
cout输出格式控制
计数系统格式:
dec
、hex
、oct
控制符用以显示十进制、十六进制、八进制
cout << hex;// hex(cout);
setf()设置:
除了使用setf()
,还可以使用还可以使用标准控制符。
unsetf()
清除效果,切换回默认模式
#include <iostream> #include <cmath> int main() { using namespace std; cout.setf(ios_base::showpoint); //显示小数点,自动填零 cout.precision(3); //显示小数点后三位有效数字 cout.setf(ios_base::fixed, ios_base::floatfield); //使用定点计数法 long n; for(n = 1; n <= 41; n+=10) { cout.width(4); cout<< n << "|"; cout<<sqrt(double(n))<< "|\n"; } return 0; }
头文件iomanip:
setprecision()用来设置精度;
setfill()用来填充字符;
setw()用来设置字段宽度;
cout << std::setw(6) << std::setfill('.') << 10 << set::setfill(' '); cout << std::setw(12) << std::setprecision(3) << 3.162;
cin输入格式控制
cin
跳过空白(空格、换行符和制表符),直到遇到空白字符。
get(char&)
和get(void)
提供不跳过空白的单字符输入功能。
函数get(char*,int,char)
和getline(char*,int,char)
在默认情况下读取整行而不是一个单词。
get(char&)和get(void)
get(char*,int,char)和getline(char*,int,char)
istream & get(char *, int, char);istream & get(char *, int);istream & getline(char *, int, char);istream & getline(char *, int);
第一个参数用于放置输入字符串的内存单元的地址。第二个参数比要读取的最大字符数大1。第三个参数指定用作分解符的字符(默认将换行符用作分解符)。
get()将分界字符留在输入队列中,而getline()不保留,并丢弃输入中的分界字符。
read()、peek()、putback()
read()
函数读取指定数目的字节,并将它们储存在指定的位置中。
peek()
函数返回输入中的下一个字符,但不抽取输入流中的字符。
putback()
函数将一个字符插入到输入字符串中,peek()
的效果相当于先使用get()
读取一个字符,然后使用putback()
将该字符放回输入流中。
while(cin.peek()!='#') { cin.get(ch); cout << ch ; }
write()
write()
函数将内存中指定数目的字节复制到文件中。功能与read()相反。
ifstream fin; //初始化流 fin.open(file, ios_base::in |ios_base::binary); //将流与文件关联起来,且设置对应的模式 ofstream fout(file,ios_base::out | ios_base::app |ios_base::binary); fin.read((char*) &p1, sizeof p1); //读取文件 fout.write((char *) &p1, sizeof p1);
流状态:
eofbit: 当cin操作到达文件末尾时,它将设置eofbit;
failbit:当cin操作未能读取到预期的字符时,它将设置failbit;
badbit: 在一些无法诊断的失败破坏流时,badbit元素将被设置;
当全部3个状态都设置为0时,说明一切顺利。
clear(); 将清除全部的状态位eofbit、failbit、badbit;
setstate(); 该方法只影响其参数中已设置的位,不会影响其他位。
文件的输入与输出
磁盘驱动器被设计为以大块的方式传递数据,而不是逐字节的传输,因此通过缓冲可以大大提高从程序到文件传输数据的速度。
要将文件与流文件关联起来,可以在初始化文件流对象时提供文件名,也可以先创建一个文件流对象,然后用open()方法将这个流与文件关联起来。close()方法终止流与文件之间的连接。
文件模式:
设置格式:
ifstream fin(file, model); ofstream fout(); fout.open(file, model);
ifstream fin; fin.clear(); //清空相关设置 fin.open(file, ios_base::in |ios_base::binary); //初始化并关联流文件 if (fin.is_open()) //重要,检索文件是否已经打开 { cout << "Here are the current contents of the " << file <<"file:\n"; while(fin.read((char*) &p1, sizeof p1)) //使用read()函数读取文件内容 { cout <<setw(20) <<p1.name <<":" << setprecision(0) <<setw(12) << p1.population << setprecision(2) <<setw(6) << p1.g << endl; } fin.close(); }
随机存取:
seekg()和seekp():将输入指针移动到指定的文件位置,将输出指针移动到指定的文件位置。
seekg()
设置格式:
istream & seekg(streamoff, ios_base::seekdir); istream & seekg(streampos);
第一个原型的参数:streamoff
被用来度量相对于文件特定位置的偏移量(单位为字节)。ios_base::seekdir
有3个可能值,ios_base::beg
指相对于文件开始处的偏移量,ios_base::cur
指相对于当前位置的偏移量,ios_base::end
指相对于文件尾的偏移量。
第二个原型的参数:streampos
类型的值定位到文件中的一个位置,streampos
值表示文件中的绝对位置。
tellg()和tellp():检查文件指针的当前位置,分别对输入流和输出流而言。