输入输出流
1. 用控制符输出格式,例:
1 #include <iostream> 2 #include <iomanip>//利用控制符输出必须包含iomanip头文件 3 using namespace std; 4 int main() 5 {int a; 6 cout<<"input a:"; 7 cin>>a; 8 cout<<"dec:"<<dec<<a<<endl; //以十进制输出 9 cout<<"hex:"<<hex<<a<<endl; //十六进制 10 cout<<"oct:"<<setbase(8)<<a<<endl; //八进制 11 char *pt="China"; 12 cout<<setw(10)<<pt<<endl; //宽度为10,China前补上5个空格 13 cout<<setfill('*')<<setw(10)<<pt<<endl; //China前补上5个* 14 double pi=22.0/7.0; 15 cout<<setiosflags(ios::scientific)<<setprecision(8);//科学记数法,8位小数 16 cout<<"pi="<<pi<<endl; //输出pi 17 cout<<"pi="<<setprecision(4)<<pi<<endl; //改为4位小数 18 cout<<"pi="<<setiosflags(ios::fixed)<<pi<<endl;//去掉科学记数法 19 return 0; 20 }
控制符用法列表如下:
2. 用流对象cout中用于控制输出格式的成员函数来控制输出格式
例如:
cout.setf(iso::showbase)
cout.setf(iOS::oct)
cout.width(10)
cout.setf(ios::internal | ios::showpos)
等等,其中参数iso::showbase属于格式标志,是在类ios中定义的枚举值。因为用流控制成员函数没有控制符使用方便,所以一般不常用。
3. put函数(cout对象的成员函数)
作用:输出单个字符,例如:
cout.put(‘a’); //等价于cout.put(97),97为a的ASCII码
cout.put(71).put(79).put(79).put(68).put(‘\n’);//连续输出字符GOOD
将字符串“BASIC”反序输出:
1 #include <iostream> 2 using namespace std; 3 int main( ) 4 { 5 char *a="BASIC"; 6 for(int i=4;i>=0;i--) 7 cout.put(*(a+i)); 8 cout.put('\n'); 9 return 0; 10 }
也可以用C语言的格式:将上面的cout.put()改成putchar()
4. cin.get()提取一个字符,类似于C语言中的getchar(),但是它可以有3个参数:
cin.get(字符数组,字符个数n,终止字符)
例如:cin.get(ch, 10, ‘\n’); cout<<ch<<endl;
get函数中第三个参数可以省略,此时默认为’\n’。下面两行等价:
cin.get(ch, 10, ‘\n’);
cin.get(ch, 10);
终止字符也可以用其他字符,例如:
cin.get(ch,10,’x’);
5. cin.getline用于输入一个字符串
用法:cin.getline(char*,int,char),ENTER来结束输入,例如:
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 const int ArSize = 20; 6 char name[ArSize]; 7 char dessert[ArSize]; 8 9 cout<<"Enter your name:\n"; 10 cin.getline(name,ArSize); 11 cout<<"Enter your favorite dessert:\n"; 12 cin.getline(dessert,ArSize); 13 cout<<"I have some delicious "<<dessert; 14 cout<<" for you, "<<name<<".\n"; 15 return 0; 16 }
cin<<与cin.getline()的区别:用“cin<<”读数据时以空白字符(空格、tab、回车)作为终止标志,而用cin.getline()可以读入一系列字符,包括空格。例如:
char c[30];//输入I’m a good boy !
cin>>c;// c只能得到第一个空格前的I’m
cin.getline(c);//c可以得到整句I’m a good boy !
6. eof函数
eof是end of file的缩写,表示“文件结束”,eof函数值为非零表示真,否则为0表示假。例如:
当输入Ctrl+Z时,cin.eof()就为真,!cin.eof()则为假,所以结束while循环。
7. cin.peek()函数和cin.putback()函数
用法见下面程序的注释:
即,我们可以用cin.peek()函数来获取当前输入流指针的当前指向;可以用cin.putback()来获取前面get或getline函数输入的内容中的一个字符,并插入到当前流指针的前面。
8. cin.ignore()函数
用法cin.ignore(5, ‘A’); //从当前指针位置(不包括当前指针)开始,忽略后面cin输入的5个字符,或者遇到字符’A’就不再往后跳了(‘A’会被跳过)。
默认写作:cin.ignore(),相当于cin.ignore(1, EOF),EOF代表文件结束符
例如:
1 #include <iostream> 2 using namespace std; 3 int main( ) 4 { 5 char c[30]; 6 cin.getline(c, 30, '^');//输入I am a cool boy !^123I'm bad girl.^I’m smart. 7 cout<<"The first part is: "<<c<<endl; 8 cin.ignore(3);//忽略掉^后面的1233个字符 9 cin.getline(c, 30, '^'); 10 cout<<"The second part is: "<<c<<endl; 11 return 0; 12 }
9.文件
(1)ASCII文件(类名ifstream、ofstream和fstream,存入是out,读取是in)
a. 存入文件
ofstream outfile;
outfile.open("f1.dat",ios::out); // ios::out(格式标志)是默认的,故也可以省略
上面两行等价于:
ofstream outfile("f1.dat",ios::out);
现在可以用outfile对象来存入数据了:
cin>>a[i];
outfile<<a[i]<<" ";//每读入一个整数就输出到磁盘文件
用完记得,关闭文件:
outfile.close();
文件输入输出格式标志如下:
完整实例:
生产的f1.dat文件可以用记事本打开,也可以在DOS下用TYPE命令打开:
C:\Documents and Settings>D: //直接输入盘符,切换到D盘
D:\>cd 001\mycpp //用cd命令切换到文件目录
D:\ 001\mycpp>type f1.dat //用TYPE命令查看dat文件
2 5 6 8 7 9 5 6 4 10
b. 读取文件,例:
和存入文件差不多:infile("f1.dat",ios::in),infile>>a[i],infile.close()
实例如下:
编一个专门读取dat文件内容的程序:
(2)二进制文件(类名为ifstream、ofstream和fstream,与ASCII用到的类相同)
成员函数read和write,原型如下:
istream & read(char * buffer, int len);//读取
ostream & write(const char * buffer, int len);//存入
两个参数:char指针指向要读写的对象,len代表读写的字节数。用法如下:
outfile.write((char *)&stud[i], sizeof(stud[0]));
iofile.read((char *)&stud[i], sizeof(stud[0]));
注意原型声明中类型为字符指针型,传递时必须用字符指针(p)或者字符类型数据的地址(&s),只能将相同类型的指针或者地址赋值给指针。
其他成员函数,例如:
infile.seekg(100);//g是get的意思,代表输入。文件指针向前移动50个字节
infile.seekg(-50,ios::cur);//输入文件指针从当前位置后移50字节
outfile.seekp(-70,ios::end);//输出文件指针从文件尾倒退70字节
完整实例:
例子:访问文件中的任何一个位置,并频繁读写
要求:有5个学生的数据,把它们存到磁盘文件中,将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来;将第3个学生的数据修改后存回磁盘文件中的原有位置;从磁盘文件读入修改后的5个学生的数据并显示出来。程序如下:
来源:https://www.cnblogs.com/baobao-meng/p/5565111.html