1.c++语言标准输入输出流
<1>控制符的用法
#include <iostream> #include <iomanip> using namespace std; int main(){ int x=30,y=300,z=1024; cout<<"Decimal:"<<x<<" "<<y<<" "<<z<<endl;//按十进制输出 cout<<"Octal:"<<oct<<x<<" "<<y<<" "<<z<<endl;//按八进制输出 cout<<"Hexademical:"<<hex<<x<<" "<<y<<" "<<z<<endl;//按十六进制输出 cout<<setiosflags(ios::uppercase);//设置数值中字母大写输出 cout<<"Hexademical:"<<hex<<x<<" "<<y<<" "<<z<<endl;// cout<<resetiosflags(ios::uppercase);//设置数值中字母小写输出 cout<<"Hexademical:"<<hex<<x<<" "<<y<<" "<<z<<endl;// cout<<"Decimal:"<<dec<<x<<" "<<y<<" "<<z<<endl;//恢复按十进制输出 return 0; }
运行结果:
#include <iostream> #include <iomanip> using namespace std; int main(){ int a=10; int b=1000; cout<<setw(5)<<a<<endl; cout<<setw(2)<<b; return 0; }
setw操作符主要用来输出预留空格数,若空间多余则向右对齐;若空间不够,按数据长度输出。
#include <iostream> #include <iomanip> using namespace std; int main(){ cout<<setfill(‘*‘)//设置填充符号为"*" <<setw(2)<<"OK"<<endl <<setw(3)<<"OK"<<endl <<setw(4)<<"OK"<<endl; cout<<setfill(‘ ‘);//恢复默认设置,填充空格 return 0; }
#include <iostream> #include <iomanip> using namespace std; int main(){ double test=22.0/7;//c++语言默认的流输出数值有效位为六位 cout<<test<<endl; cout<<setprecision(0)<<test<<endl//c++语言最小有效位为1位,此处取1 <<setprecision(1)<<test<<endl <<setprecision(2)<<test<<endl <<setprecision(3)<<test<<endl <<setprecision(4)<<test<<endl; cout<<setiosflags(ios::fixed); cout<<setprecision(8)<<test<<endl; //setiosflags(ios::fixed)与setprecision(8)合用,控制小数点右边的数字个数为八个 cout<<setprecision(6); return 0; }
#include <iostream> #include <iomanip> using namespace std; int main(){ double x=66,y=-8.246; cout<<x<<" "<<y<<endl; cout<<setiosflags(ios::showpoint);//设置强制显示小数点和无效0 cout<<x<<" "<<y<<endl; return 0; }
#include <iostream> #include <iomanip> using namespace std; int main(){ double x=66,y=-8.246; cout<<x<<" "<<y<<endl; cout<<setiosflags(ios::showpos);//设置强制显示正号 cout<<x<<" "<<y<<endl; return 0; }
<2>.使用ios类成员函数
#include <iostream> using namespace std; int main(){ char str[250]; cout<<"请输入一字符串:\n"; cin.getline(str,sizeof(str),‘,‘); cout<<"输入的字符串为:"<<str<<endl; return 0; }
从键盘读取一行文本,每遇到一个逗号就结束一次输入。
运行结果:
2.文件输入输出流
文件分为ASCII文件和二进制文件
文件的打开与关闭
ofstream、ifstream、fstream类
#include <iostream> #include <fstream> #include <string> using namespace std; int main(){ ofstream myf("d:\\myabc.txt"); char txt[255]; while (1) { cin.getline(txt,255); if(strlen(txt)==0) break; myf<<txt<<endl; } return 0; }
此程序可由用户输入任意一些字符串并按行保存到磁盘文件上。
#include <iostream.h> #include <fstream.h> #include <string.h> int main(){ ifstream myf("d:\\myabc.txt",ios::nocreate); if(myf.fail()){ cout<<"file not exist!"<<endl; return 0; } char txt[255]; myf>>txt; while(!myf.eof()){ cout<<txt<<endl; myf>>txt; } return 0; }
该程序将上面文件内容输出到屏幕上
先定义文件流对象,再与文件连接
ifstream file;
file.open("myfile.txt",ios::in);//打开文件
file.close();//关闭文件
<1>文件的读写
#include <iostream> #include <fstream> #include <string> #include <cstdlib> using namespace std; int main(){ ifstream ifile; ofstream ofile; ifile.open("d:\\myabc.txt"); ofile.open("d:\\213.txt"); if(ifile.fail()||ofile.fail()){ cerr<<"open file fail\n"; return EXIT_FAILURE;//EXIT_FAILURE在cstdlib库中定义 //用于向操作系统报告终止不成功 } char ch; ch=ifile.get(); while(!ifile.eof()){ ofile.put(ch); ch=ifile.get(); } ifile.close(); ofile.close(); return 0; }
文件复制
有时,程序用户需要交互输入数据文件名,则可使用下面的程序代码:
ifstream ifile;
string fileName;
cout<<"Enter the input file name:";
cin>>fileName;
ifile.open(fileName.c_str());
<2>文本文件的读写
要求:输入一个学生的姓名、学号、年龄和住址存入文本文件中,然后读出该文件的内容。
#include <iostream> #include <fstream> #include <string> #include <cstdlib> using namespace std; class student{ public: char name[10]; int num; int age; char addr[15]; friend ostream & operator<<(ostream &out,student &s); friend istream & operator>>(istream &in,student &s); }; ostream & operator<<(ostream &out,student &s){ out<<s.name<<" "<<s.num<<" "<<s.age<<" "<<s.addr<<endl; return out; } istream & operator>>(istream &in,student &s){ in>>s.name>>s.num>>s.age>>s.addr; return in; } int main(){ ofstream ofile; ifstream ifile; ofile.open("d:\\s.txt"); student s; for(int i=1;i<=3;i++){ cout<<"请输入第"<<i<<"个学生的姓名 学号 年龄 住址"<<endl; cin>>s; ofile<<s; } ofile.close(); cout<<"\n读出文件内容"<<endl; ifile.open("d:\\s.txt"); ifile>>s; while(!ifile.eof()){ cout<<s; ifile>>s; } ifile.close(); return 0; }
<3>二进制文件的读写
文本文件和二进制文件最根本的区别在于进行I/O操作时对"\n"字符的解释方式不同。
通过随机数产生函数rand()产生20个整数,逐个将这些数以二进制方式写入文件file.dat中,然后读出这些数,在内存中对它们进行升序排序,再将排序后的数以文本方式逐个写入file.out文件中。
#include <iostream> #include <math.h> #include <stdlib.h> #include <fstream> #include <iomanip> using namespace std; void sort(int[],int); int main(){ fstream dat,out; //定义文件流对象 int i,a[20],b[20]; dat.open("file.dat",ios::binary|ios::out|ios::in);//为读写打开二进制文件 if(!dat){ cout<<("cannot open file\n"); exit(0); } for(i=0;i<20;i++){ a[i]=rand(); dat.write((char*)&a[i],sizeof(int)); //将20个数读入文件 } dat.seekg(0); //将文件指针移至文件头 for(i=0;i<20;i++) dat.read((char*)&b[i],sizeof(int)); //读出20个数 sort(b,20); //调用排序函数 out.open("file.out",ios::out); //为输出打开文本文件 if(!out){ cout<<"cannot open file\n"; exit(0); } for(i=0;i<20;i++){ out<<b[i]<<" "; } out<<"\n"; for(i=0;i<20;i++){ //将排序后数据写入文本文件 cout<<setw(10)<<b[i]; if((i+1)%5==0) cout<<endl; } out.close(); //文本文件 dat.close(); return 0; } void sort(int x[],int m){ //排序函数 int i,j,k,t; for(i=0;i<m-1;i++){ k=i; for(j=i+1;j<m;j++) if(x[j]<x[k]) k=j; if(k!=i){ t=x[i];x[i]=x[k];x[k]=t; } } }
运行结果:
<4>文件的随机访问
#include <fstream> #include <iostream> using namespace std; int main(){ fstream f("DATA",ios::in|ios::out|ios::binary); int i; for(i=0;i<20;i++)//先向文件中写20个二进制位表示的整数,无格式 f.write((char*)&i,sizeof(int)); streampos pos=f.tellp();//记录下当前的写指针 for(i=20;i<40;i++)//再向文件中写20个二进制位表示的整数,无格式 f.write((char*)&i,sizeof(int)); f.seekg(pos);//将读指针定位在pos所指的位置 f.read((char*)&i,sizeof(int)); cout<<"the data stored is"<<i<<endl; f.seekp(0,ios::beg);//移到文件开始 for(i=100;i<140;i++)//重写文件中的内容 f.write((char*)&i,sizeof(int)); f.seekg(pos); f.read((char*)&i,sizeof(int));//将读指针定位在pos所指的位置 cout<<"the data stored is"<<i<<endl; return 0; }
运行结果:
时间: 2024-10-03 14:38:49