[c語言]檔案資訊輸入與輸出
阿新 • • 發佈:2019-02-03
要求:
將學生資訊(姓名,年齡,學號,家庭住址)寫入檔案,並輸出某一學生資訊(比如最後一個學生)
程式中所涉及的函式如下:
1:檔案開啟函式:fopen(欲開啟的檔名稱or檔案路徑,哪種方式)
2:檔案關閉函式:fclose(檔案指標)
3:檔案資訊寫入函式(資料塊):fwrite(要寫入資料的地址,要寫入資料項的位元組數size,要寫入size位元組資料項的個數,檔案指標)
4:檔案資訊讀出函式(資料塊):fread(要讀出資料的地址,要讀出資料項的位元組數size,要讀出size位元組資料項的個數,檔案指標)
5:修改檔案指標位置的函式:fseek(檔案指標,偏移量,從哪開始偏移)
6:讀寫檔案出錯檢測的函式:ferror(檔案指標)
7:檔案出錯標誌or檔案結束標誌置0的函式:clearerr(檔案指標)
程式碼如下:
#include<iostream> using namespace std; #define NAMESIZE 10 #define ADDARSIZE 20 #define COUNT 4 #define FILENAMESIZE 10 /*結構體:學生資訊*/ typedef struct Student { char name[NAMESIZE]; int age; int stuNum; char addr[ADDARSIZE]; }Student; Student student[COUNT]; /*列印第n個學生的資訊*/ void showInfor(char *name,int n) { FILE *fp = NULL; /*if((fp = fopen(name,"r")) == NULL) { cout<<"open error!"<<endl; }*/ fp = fopen(name,"w+"); if(ferror(fp)) { cout<<"open error!"<<endl; clearerr(fp); } fseek(fp,(n-1)*sizeof(Student),0); //修改位置指標,從檔案開始0(SEEK_SET)偏移(n-1)*sizeof(Student)個位元組 Student s; fread(&s,sizeof(Student),1,fp);//把第n個學生的資訊從檔案中讀出並寫入s中 fclose(fp); fp = NULL; cout<<"name:"<<s.name<<" "<<"stuNum:"<<s.stuNum<<" "; cout<<"age:"<<s.age<<" "<<"addr:"<<s.addr<<endl; } /*把學生資訊新增到檔案*/ void addInforToFile(char *name) { FILE *fp = NULL; /*if( (fp = fopen(name,"w+")) == NULL) //1開啟檔案 { cout<<"open error!"<<endl; }*/ fp = fopen(name,"w+"); if(ferror(fp)) { cout<<"open error!"<<endl; clearerr(fp); } /*for(int i=0;i<COUNT;++i) { fwrite(&student[i],sizeof(Student),1,fp); }//for迴圈的作用和下面的一句是等價的 */ fwrite(student,sizeof(Student),COUNT,fp); //將資訊(以塊的形式)寫入檔案 fclose(fp); fp = NULL; } int main() { for(int i=0;i<COUNT;++i) { cout<<"請輸入一下資訊"<<endl; cout<<"name:"; cin>>student[i].name; cout<<"age:"; cin>>student[i].age; cout<<"stuNum"; cin>>student[i].stuNum; cout<<"addar:"; cin>>student[i].addr; } cout<<"請輸入檔案的名稱:" ; char fileName[FILENAMESIZE]; cin>>fileName; addInforToFile(fileName); cout<<"你想輸出第幾個學生的資訊:"; int n; cin>>n; showInfor(fileName,n); return 0; }
注意:涉及檔案操作時要注意以下幾點
a:定義檔案指標時,將指標指向空,即FILE *fp = NULL;
b:fopen()與fclose()函式成對使用,否則會造成檔案所佔記憶體洩露以及在下次訪問檔案時出現錯誤;
c: 檔案關閉後,將檔案指標賦值為空,防止出現遊離指標,對整個工程造成不必要的麻煩