从键盘输入10个整数,其中,5个整数存放到磁盘文件first.dat,另外5个整数存放到磁盘文件second.dat。从second.dat读取5个整数,存放到first.dat 文件原有数据的后面。从first.dat 读取10个整数,升序排列后存放到second.dat (覆盖原有数据)。
1 #include <iostream> 2 #include <cstdlib> 3 #include <fstream> 4 using namespace std; 5 6 void bubblesort(int arr[],int n); 7 int main() 8 { 9 fstream f("first.dat",ios::in|ios::out|ios::binary); 10 if(!f) 11 { 12 cerr<<"first open error!"<<endl; 13 exit(1); 14 } 15 fstream s("second.dat",ios::in|ios::out|ios::binary); 16 if(!f) 17 { 18 cerr<<"second open error!"<<endl; 19 exit(1); 20 } 21 //打开文件、关联 22 23 int i; 24 int z[10]; 25 cout<<"please enter 10 integers:"; 26 for(i=0;i<10;i++) 27 { 28 cin>>z[i]; 29 } 30 cout<<"integers:"; 31 for(i=0;i<10;i++) 32 { 33 cout<<"z"<<i<<": "<<z[i]<<" "; 34 } 35 cout<<endl; 36 //从键盘输入10个整数,并回显 37 38 for(i=0;i<5;i++) 39 { 40 f.write((char*)&z[i],sizeof(z[i])); 41 } 42 for(i=5;i<10;i++) 43 { 44 s.write((char*)&z[i],sizeof(z[i])); 45 } 46 //前五个写入first,后五个写入second。 47 48 int z1[5]={0}; 49 s.seekg(0,ios::beg); 50 cout<<"second:"; 51 for(i=0;i<5;i++) 52 { 53 s.read((char *)&z1[i],sizeof(z1[i])); // 54 cout<<z1[i]<<" "; 55 } 56 cout<<endl; 57 //读出second中的5 个数至existing program 58 59 for(i=0;i<5;i++) 60 { 61 f.write((char *)&z1[i],sizeof(z1[0])); 62 } 63 //将这五个数据续写到first尾 64 65 f.seekg(0,ios::beg); 66 int z2[10]={0}; 67 cout<<"first:"; 68 for(i=0;i<10;i++) 69 { 70 f.read((char *)&z2[i],sizeof(z2[0])); 71 cout<<z2[i]<<" "; 72 } 73 cout<<endl; 74 //读出first中的10 个整数至EP 75 76 bubblesort(z2,10); 77 cout<<"after sort:"; 78 for(i=0;i<10;i++) 79 cout<<z2[i]<<" "; 80 cout<<endl; 81 //排序并显示结果 82 83 s.seekp(0,ios::beg); 84 for(i=0;i<10;i++) 85 { 86 s.write((char *)&z2[i],sizeof(z2[i])); 87 } 88 //将排序后的10个数写入second,从头,覆盖原数据 89 90 s.seekg(0,ios::beg); 91 int z3[10]={0}; 92 cout<<"second:"; 93 for(i=0;i<10;i++) 94 { 95 s.read((char *)&z3[i],sizeof(z3[0])); // 96 cout<<z3[i]<<" "; 97 } 98 cout<<endl; 99 //读出second中的10个整数,检查是否符合预期 100 101 f.close(); 102 s.close(); 103 //关闭文件 104 return 0; 105 } 106 void bubblesort(int arr[],int n) 107 { 108 int temp; 109 for(int i=1;i<n;i++) 110 for(int j=0;j<n-i;j++) 111 { 112 if(arr[j]>arr[j+1]) 113 { 114 temp=arr[j]; 115 arr[j]=arr[j+1]; 116 arr[j+1]=temp; 117 } 118 } 119 }
1.调用exit(1);需包含#include <cstdlib>。
2.fstream f("first.dat",ios::in|ios::out|ios::binary);(open)—close()成对出现。
定义、关联、打开/创建
3.注意file reading marker位置,根据读写需要定位。例如,续写时,若marker不再末尾,需移到文件尾。