C語言中文件的輸入輸出
文件的讀寫
一.fputc函數和fgetc()函數(putc函數和getc()函數)
1.fputc函數
把一個字符寫到磁盤文件上去,調用形式:
fputc(ch,fp);成功輸出字符,失敗EOF(-1)
2.fgetc函數
讀入一個字符,該文件必須是以讀或以讀寫方式打開的
調用形式: ch=fgetc(fp);
while(ch!=EOF)
讀入字符時,遇到結束符EOF(-1),讀取結束,但是有些
二進制數的值正好是-1,就被當作結束符處理,所以提供了
一個feof(fp)來判斷是否結束
二.fread函數和fwrite函數
用來讀取一組數據,調用形式如下:
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
buffer:是一個指針,對於fread來說,它是讀入一個數
據的存放地址,對fwrite來說,是輸出一個數的存放地址
size:要讀寫的字節數
count:要進行讀寫多少個size字節的數據項
三.fprintf和fscanf函數
調用格式:
fprintf(文件指針,格式字符串,輸出表列);
fscanf(文件指針,格式字符串,輸出表列);
用fprintf()和fscanf()函數對磁盤文件的讀寫,使用方
便,容易理解,但是在輸入時要進行ASCII碼轉換到二進制
形式,輸出時將二進制轉換成ASCII碼,花費時間較多,所
以在內存與磁盤頻繁交換的時候,最好不要用這兩個函數
四.fputs和fgets函數
fgets是從指定文件讀入一個字符串
fputs是向指定文件輸入一個字符串
形式如下:
fgets(str,n,fp);
fputs(str,fp);
文件定位
1.rewind函數
使位置指針重新返回文件的開頭,此函數沒有返回值
調用格式:
rewind(fp);
2.fseek函數
可以實現改變文件的位置
fseek(文件類型指針,位移量,起始點);
位移量要求是long型的數據,所以位移數字末尾要加L
文件開始 SEEK_SET 0
文件當前位置 SEEK_CUR 1
文件末尾 SEEK_END 2
如:fseek(fp,100L,0);一般用於二進制文件
3.ftell函數
得到流式文件中當前位置,如果出錯返回-1
出錯檢驗
1.ferror函數
ferror(fp);
在調用輸入輸出函數時,如果出現錯誤,除返回值有反應外
,還可以用ferror函數檢查,ferror返回0表示沒有出錯,
返回非0,表示出錯
每次調用輸入輸出函數都會產生一個新的ferror函數值,素
以每次調用輸入輸出後,立即檢查ferror函數值,否則信息
丟失
在執行fopen函數時,ferror函數初始值自動設置成0
2.clearerr函數
作用是使文件錯誤標誌和文件結束標誌置0
假如調用輸入輸出函數時出錯,調用clearerr(fp)
後,ferror(fp)的值變成0,只要出現錯誤標誌,就一直保留
,直到對同一個文件調用clearerr函數或者rewind函數或熱
河一個輸入輸出函數
下面是一個例子來說明
#include <stdio.h>
struct test {
char stu[20];
int age;
}stu[2],stu1[2];
//fputc的用法
void putcTest() {
FILE *fp;
char ch;
if ((fp=fopen("c:\\1.txt","a")) == NULL) {
printf("file cannot open\n");
return;
}
ch=getchar();
while (ch!='#') {
putc(ch,fp);
putchar(ch);
ch=getchar();
}
fclose(fp);
}
//getc的用法
void getcTest() {
FILE *fp;
char ch;
if ((fp=fopen("c:\\1.txt","r+")) == NULL) {
printf("cannot open file");
return ;
}
ch=getc(fp);
while(!feof(fp)){
putchar(ch);
ch=getc(fp);
}
putchar(10);
fclose(fp);
}
//fwrite和fread的用法
void fwriteread(){
FILE *fp;
int i;
if((fp=fopen("c:\\1.txt","w+"))==NULL){
printf("cannot open file\n");
return;
}
printf("輸入兩個學生的信息形如(cuijiantao,23)\n");
for(i=0;i<2;i++){
///////////////////////////////////////////////////////////////////
//當輸入字符串的時候,後邊要用空格和後邊的隔開,否則會出現不可估量的錯誤
scanf("%s %d",stu[i].stu,&stu[i].age);///////////////////////////////////////
///////////////////////////////////////////////////////////////////////
fwrite(&stu[i],sizeof(test),1,fp);
}
rewind(fp);
for(i=0;i<2;i++){
fread(&stu1[i],sizeof(test),1,fp);
printf("%s %d\n",stu1[i].stu,stu1[i].age);
}
fclose(fp);
}
//fprintf()和fscanf()函數的用法以及fputs() 和fgets()的用法
/////用fprintf()和fscanf()函數對磁盤文件的讀寫,使用方便,容易理解,
//但是在輸入時要進行ASCII碼轉換到二進制形式,輸出時將二進制轉換成ASCII碼,花費時間較多
//所以在內存與磁盤頻繁交換的時候,最好不要用這兩個函數
void printfscanfTest(){
FILE *fp;
int i=3;
int j;
char s[100];
if((fp=fopen("c:\\1.txt","w+"))==NULL){
printf("cannot open file");
}
fputs("sdfasdf",fp);
//fprintf(fp,"%d",i);
rewind(fp);
//fscanf(fp,"%d",&j);
fgets(s,10,fp);
//printf("%d",j);
printf("%s\n",s);
fclose(fp);
}
void main(){
printfscanfTest();
}
一.fputc函數和fgetc()函數(putc函數和getc()函數)
1.fputc函數
把一個字符寫到磁盤文件上去,調用形式:
fputc(ch,fp);成功輸出字符,失敗EOF(-1)
2.fgetc函數
讀入一個字符,該文件必須是以讀或以讀寫方式打開的
調用形式: ch=fgetc(fp);
while(ch!=EOF)
讀入字符時,遇到結束符EOF(-1),讀取結束,但是有些
二進制數的值正好是-1,就被當作結束符處理,所以提供了
一個feof(fp)來判斷是否結束
二.fread函數和fwrite函數
用來讀取一組數據,調用形式如下:
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
buffer:是一個指針,對於fread來說,它是讀入一個數
據的存放地址,對fwrite來說,是輸出一個數的存放地址
size:要讀寫的字節數
count:要進行讀寫多少個size字節的數據項
三.fprintf和fscanf函數
調用格式:
fprintf(文件指針,格式字符串,輸出表列);
fscanf(文件指針,格式字符串,輸出表列);
用fprintf()和fscanf()函數對磁盤文件的讀寫,使用方
便,容易理解,但是在輸入時要進行ASCII碼轉換到二進制
形式,輸出時將二進制轉換成ASCII碼,花費時間較多,所
以在內存與磁盤頻繁交換的時候,最好不要用這兩個函數
四.fputs和fgets函數
fgets是從指定文件讀入一個字符串
fputs是向指定文件輸入一個字符串
形式如下:
fgets(str,n,fp);
fputs(str,fp);
文件定位
1.rewind函數
使位置指針重新返回文件的開頭,此函數沒有返回值
調用格式:
rewind(fp);
2.fseek函數
可以實現改變文件的位置
fseek(文件類型指針,位移量,起始點);
位移量要求是long型的數據,所以位移數字末尾要加L
文件開始 SEEK_SET 0
文件當前位置 SEEK_CUR 1
文件末尾 SEEK_END 2
如:fseek(fp,100L,0);一般用於二進制文件
3.ftell函數
得到流式文件中當前位置,如果出錯返回-1
出錯檢驗
1.ferror函數
ferror(fp);
在調用輸入輸出函數時,如果出現錯誤,除返回值有反應外
,還可以用ferror函數檢查,ferror返回0表示沒有出錯,
返回非0,表示出錯
每次調用輸入輸出函數都會產生一個新的ferror函數值,素
以每次調用輸入輸出後,立即檢查ferror函數值,否則信息
丟失
在執行fopen函數時,ferror函數初始值自動設置成0
2.clearerr函數
作用是使文件錯誤標誌和文件結束標誌置0
假如調用輸入輸出函數時出錯,調用clearerr(fp)
後,ferror(fp)的值變成0,只要出現錯誤標誌,就一直保留
,直到對同一個文件調用clearerr函數或者rewind函數或熱
河一個輸入輸出函數
下面是一個例子來說明
#include <stdio.h>
struct test {
char stu[20];
int age;
}stu[2],stu1[2];
//fputc的用法
void putcTest() {
FILE *fp;
char ch;
if ((fp=fopen("c:\\1.txt","a")) == NULL) {
printf("file cannot open\n");
return;
}
ch=getchar();
while (ch!='#') {
putc(ch,fp);
putchar(ch);
ch=getchar();
}
fclose(fp);
}
//getc的用法
void getcTest() {
FILE *fp;
char ch;
if ((fp=fopen("c:\\1.txt","r+")) == NULL) {
printf("cannot open file");
return ;
}
ch=getc(fp);
while(!feof(fp)){
putchar(ch);
ch=getc(fp);
}
putchar(10);
fclose(fp);
}
//fwrite和fread的用法
void fwriteread(){
FILE *fp;
int i;
if((fp=fopen("c:\\1.txt","w+"))==NULL){
printf("cannot open file\n");
return;
}
printf("輸入兩個學生的信息形如(cuijiantao,23)\n");
for(i=0;i<2;i++){
///////////////////////////////////////////////////////////////////
//當輸入字符串的時候,後邊要用空格和後邊的隔開,否則會出現不可估量的錯誤
scanf("%s %d",stu[i].stu,&stu[i].age);///////////////////////////////////////
///////////////////////////////////////////////////////////////////////
fwrite(&stu[i],sizeof(test),1,fp);
}
rewind(fp);
for(i=0;i<2;i++){
fread(&stu1[i],sizeof(test),1,fp);
printf("%s %d\n",stu1[i].stu,stu1[i].age);
}
fclose(fp);
}
//fprintf()和fscanf()函數的用法以及fputs() 和fgets()的用法
/////用fprintf()和fscanf()函數對磁盤文件的讀寫,使用方便,容易理解,
//但是在輸入時要進行ASCII碼轉換到二進制形式,輸出時將二進制轉換成ASCII碼,花費時間較多
//所以在內存與磁盤頻繁交換的時候,最好不要用這兩個函數
void printfscanfTest(){
FILE *fp;
int i=3;
int j;
char s[100];
if((fp=fopen("c:\\1.txt","w+"))==NULL){
printf("cannot open file");
}
fputs("sdfasdf",fp);
//fprintf(fp,"%d",i);
rewind(fp);
//fscanf(fp,"%d",&j);
fgets(s,10,fp);
//printf("%d",j);
printf("%s\n",s);
fclose(fp);
}
void main(){
printfscanfTest();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.