C語言輸入輸出函數(shù)有很多,標(biāo)準(zhǔn)I/O函數(shù)中包含了如下幾個(gè)常用的函數(shù):
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、三河網(wǎng)站維護(hù)、網(wǎng)站推廣。
scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等.
int
getc(FILE
*fp)
getc主要是從文件中讀出一個(gè)字符.常用的判斷文件是否讀取結(jié)束的語句為
(ch
=
getc(fp))
!=
EOF.EOF為文件結(jié)束標(biāo)志,定義在stdio.h中,就像EXIT_SUCCESS,EXIT_FAILURE定義在stdlib.h中一樣,文件也可以被理解為一種流,所以當(dāng)fp為stdin時(shí),getc(stdin)就等同于getchar()了.
int
putc(int
ch,FILE
*fp)
putc主要是把字符ch寫到文件fp中去.如果fp為stdout,則putc就等同于putchar()了.
int
getchar(void)
getchar主要是從標(biāo)準(zhǔn)輸入流讀取一個(gè)字符.默認(rèn)的標(biāo)準(zhǔn)輸入流即stdio.h中定義的stdin.但是從輸入流中讀取字符時(shí)又涉及到緩沖的問題,所以并不是在屏幕中敲上一個(gè)字符程序就會運(yùn)行,一般是通過在屏幕上敲上回車鍵,然后將回車前的字符串放在緩沖區(qū)中,getchar就是在緩沖區(qū)中一個(gè)一個(gè)的讀字符.當(dāng)然也可以在while循環(huán)中指定終止字符,如下面的語句:while
((c
=
getchar())
!=
'#')這是以#來結(jié)束的.
int
putchar(int
ch)
putchar(ch)主要是把字符ch寫到標(biāo)準(zhǔn)流stdout中去.
char
*
gets(char
*str)
gets主要是從標(biāo)準(zhǔn)輸入流讀取字符串并回顯,讀到換行符時(shí)退出,并會將換行符省去.
int
puts(char
*str)
puts主要是把字符串str寫到標(biāo)準(zhǔn)流stdout中去,并會在輸出到最后時(shí)添加一個(gè)換行符.
char
*fgets(char
*str,
int
num,
FILE
*fp)
str是存放讀入的字符數(shù)組指針,num是最大允許的讀入字符數(shù),fp是文件指針.fgets的功能是讀一行字符,該行的字符數(shù)不大于num-1.因?yàn)閒gets函數(shù)會在末尾加上一個(gè)空字符以構(gòu)成一個(gè)字符串.另外fgets在讀取到換行符后不會將其省略.
int
fputs(char
*str,
file
*fp)
fputs將str寫入fp.fputs與puts的不同之處是fputs在打印時(shí)并不添加換行符.
int
fgetc(FILE
*fp)
fgetc從fp的當(dāng)前位置讀取一個(gè)字符.
int
fputc(int
ch,
file
*fp)
fputc是將ch寫入fp當(dāng)前指定位置.
int
fscanf(FILE
*fp,
char
*format,
輸入列表)
fscanf按照指定格式從文件中出讀出數(shù)據(jù),并賦值到參數(shù)列表中.
int
fprintf(FILE
*fp,
char
*format,
輸出列表)
fprintf將格式化數(shù)據(jù)寫入流式文件中.
數(shù)據(jù)塊讀寫函數(shù)
fread
(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
參數(shù)說明:
buffer:是一個(gè)指針。
對fread
來說,它是讀入數(shù)據(jù)的存放地址。
對fwrite來說,是要輸出數(shù)據(jù)的地址(均指起始地址)。
size:
要讀寫的字節(jié)數(shù)。
count:
要進(jìn)行讀寫多少個(gè)size字節(jié)的數(shù)據(jù)項(xiàng)。
fp:
文件型指針。
C語言文件操作函數(shù)
13.1C語言文件
1,兩種文件存取方式(輸入,輸出方式)
順序存取
直接存取
2,數(shù)據(jù)的兩種存放形式
文本文件
二進(jìn)制文件
13.2文件指針
定義文件類型指針變量的一般形式:
FILE *指針變量名;
例如:
FILE *fp1,*fp2;
13.3打開文件
在使用文件之前,需打開文件.在C里使用fopen函數(shù)打開文件.格式為:
fopen(文件名,文件使用方式);
此函數(shù)返回一個(gè)指向FILE類型的指針.如:
FILE *fp;
fp=fopen("file_1","r");
如果調(diào)用成功,fp就指向file_1,否則返回為NULL,所以為了保證文件的正確使用,要進(jìn)行測試.采用如下語句:
If((fp=fopen("file_1","r"))==NULL)
{
printf("Cannot open this file\n");
exit(0);
}
最常用的文件使用方式及其含義如下:
1,"r".為讀而打開文本文件.(不存在則出錯(cuò))
2,"rb".為讀而打開二進(jìn)制文件.
3,"w".為寫而打開文本文件.(若不存在則新建,反之,則從文件起始位置寫,原內(nèi)容將被覆蓋)
4,"wb".為寫而打開二進(jìn)制文件.
5,"a".為在文件后面添加數(shù)據(jù)而打開文本文件.(若不存在,則新建;反之,在原文件后追加)
6,"ab".為在文件后面添加數(shù)據(jù)而打開一個(gè)二進(jìn)制文件.
最常用的文件使用方式及其含義如下:
7,"r+".為讀和寫而打開文本文件.(讀時(shí),從頭開始;在寫數(shù)據(jù)時(shí),新數(shù)據(jù)只覆蓋所占的空間,其后不變)
8,"rb+".為讀和寫而打開二進(jìn)制文件.只是在隨后的讀寫時(shí),可以由位置函數(shù)設(shè)置讀和寫的起始位置.
9,"w+".首先建立一個(gè)新文件,進(jìn)行寫操作,隨后可以從頭開始讀.(若文件存在,原內(nèi)容將全部消失)
10,"wb+".功能與"w+"同.只是在隨后的讀寫時(shí),可以由位置函數(shù)設(shè)置讀和寫的起始位置.
最常用的文件使用方式及其含義如下:
11,"a+".功能與"a"相同;只是在文件尾部添加新的數(shù)據(jù)后,可以從頭開始讀.
12,"ab+".功能與"a+"相同;只是在文件尾部添加新數(shù)據(jù)之后,可以由位置函數(shù)設(shè)置開始讀的起始位置.
13.4關(guān)閉文件
當(dāng)文件的讀寫操作完成之后,使用fclose函數(shù)關(guān)閉文件.格式如下:
fclose(文件指針)
如:fclose(fp);
13.5調(diào)用getc(fgetc)和putc(fputc)函數(shù)進(jìn)行輸入和輸出
1,調(diào)用putc(或fputc)函數(shù)輸出一個(gè)字符
調(diào)用形式為:
putc(ch,fp);
功能是:將字符ch寫到文件指針fp所指的文件中去.當(dāng)輸出成功,putc函數(shù)返回所輸出的字符;否則,返回一個(gè)EOF值.EOF是在stdio.h庫函數(shù)文件中定義的符號常量,其值等于-1.
13.5調(diào)用getc(fgetc)和putc(fputc)函數(shù)進(jìn)行輸入和輸出
例如:把從鍵盤輸入的文本按原樣輸出到名為file_1.dat文件中,用字符@作為鍵盤輸入結(jié)束標(biāo)志.
#include
Void main()
{
FILE *fpout;
char ch;
if(fpout=fpopen("file_1","w")==NULL)
{
printf("Cannot open this file!\n");
exit(0);
}
ch=getchar();
while(ch!='@')
{ fputc(ch,fpout); ch=getchar(); }
fclose(fpout);
}
2.調(diào)用getc(或fgetc)函數(shù)輸入一個(gè)字符
調(diào)用形式為:
ch=getc(pf);
功能是:從pf指定的文件中讀如一個(gè)字符,并把它作為函數(shù)值返回.
例如:把一個(gè)已存在磁盤上的file_1.dat文本文件中的內(nèi)容,原樣輸出到終端屏幕上.
#include
void main(){
FILE *fpin;
char ch;
if((fpin=fopen("file_1.dat","r"))==NULL)
{ printf("Cann't open this file!\n");exit(0);}
ch=fgetc(fpin);
while (ch!=EOF)
{ putchar(ch); ch=fgetc(fpin);}
fclose(fpin);
}
13.6判斷文件結(jié)束函數(shù)feof
EOF可以作為文本文件的結(jié)束 標(biāo)志,但不能作為二進(jìn)制文件的結(jié)束符.feof函數(shù)既可以判斷二進(jìn)制文件,又可以判斷文本文件.
例:編寫程序,用于把一個(gè)文本文件(源)復(fù)制到另一個(gè)文件(目的)中,源文件名和目的文件名由命令行輸入.命令形式如下:
可執(zhí)行程序名 源文件名 目的文件名
#include
void filecopy(FILE* ,FILE *);
void main(int argc,char *argv[]){
FILE *fpin,*fpout;
if(argc==3)
{ fpin=fopen(argv[1],"r");
fpout=fopen(argv[2],"w");
filecopy(fpin,fpout);
fclose(fpin);fclose(fpout);
}
else if(argc3)
printf("The file names too many!!\n";
else
printf("There are no file names for input or output!!\n );
}
void filecopy(FILE *fpin,FILE *fpout)
{
char ch;
ch=getc(fpin);
while(!feof(fpin))
{putc(ch,fpout); ch=getc(fpin);}
}
13.7fscanf函數(shù)和fprintf函數(shù)
1,fscanf函數(shù)
fscanf只能從文本文件中按格式輸入,和scanf函數(shù)相似,只不過輸入的對象是磁盤上文本文件中的數(shù)據(jù).調(diào)用形式為:
fscanf(文件指針,格式控制字符串,輸入項(xiàng)表)
例如:fscanf(fp,"%d%d",a,b);
fscanf(stdin,"%d%d",a,b);
等價(jià)于scanf("%d%d",a,b);
3.fprintf函數(shù)
fprintf函數(shù)按格式將內(nèi)存中的數(shù)據(jù)轉(zhuǎn)換成對應(yīng)的字符,并以ASCII代碼形式輸出到文本文件中.Fprintf函數(shù)和printf函數(shù)相似,只是將輸出的內(nèi)容按格式存放到磁盤的文本文件中.調(diào)用形式如下:
fprintf(文件指針,格式控制字符串,輸出項(xiàng)表)
如:fprintf(fp,"%d %d",x,y);
以下語句 fprintf(stdout,"%d %d",x,y)
13.8fgets函數(shù)和fputs函數(shù)
1,fgets函數(shù)
fgets函數(shù)用來從文件中讀入字符串.調(diào)用形式如下:
fgets(str,n,fp);
函數(shù)功能是:從fp所指文件中讀入n-1個(gè)字符放入str為起始地址的空間內(nèi);如果在未讀滿n-1個(gè)字符時(shí),則遇到換行符或一個(gè)EOF結(jié)束本次讀操作,并已str作為函數(shù)值返回.
13.8fgets函數(shù)和fputs函數(shù)
2,fputs函數(shù)
fput函數(shù)把字符串輸出到文件中.函數(shù)調(diào)用形式如下:
fputs(str,fp);
注意:為了便于讀入,在輸出字符串時(shí),應(yīng)當(dāng)人為的加諸如"\n"這樣的字符串.
#include stdio.h
#include iostream
int main(int argc, char *argv[])
{
char arr[10] ;
char *ap = "hello!" ;
FILE *fp ;
if ((fp = fopen("hello.txt", "wt+")) == NULL)
{
printf("error!") ;
exit(1) ;
}
fputs(ap, fp) ;
rewind(fp) ; //
fgets(arr, 10, fp) ;
printf("%s\n", arr) ;
fclose(fp) ;
return 0 ;
}
13.9fread函數(shù)和fwrite函數(shù)
例如有如下結(jié)構(gòu)體:
struct st{
char num[8];
float mk[5];
}pers[30];
以下循環(huán)將把這30個(gè)元素中的數(shù)據(jù)輸出到fp所指文件中.
for(i=0;i30;i++)
fwrite(pers[i],sizeof(struct st),1,fp);
13.9fread函數(shù)和fwrite函數(shù)
以下語句從fp所指的文件中再次將每個(gè)學(xué)生數(shù)據(jù)逐個(gè)讀入到pers數(shù)組中.
i=0;
fread(pers[i],sizeof(struct st),1,fp);
while(!feof(fp))
{ i++;
fread(pers[i],sizeof(struct st),1,fp);
}
13.10文件定位函數(shù)
1,fseek函數(shù)
fseek函數(shù)用來移動文件位置指針到指定的位置上,接著的讀或?qū)懖僮鲗拇宋恢瞄_始.函數(shù)的調(diào)用形式如下:
fseek(pf,offset,origin)
pf:文件指針
offset:以字節(jié)為單位的位移量,為長整形.
origin:是起始點(diǎn),用來指定位移量是以哪個(gè)位置為基準(zhǔn)的.
1,fseek函數(shù)
位移量的表示方法
標(biāo)識符 數(shù)字 代表的起始點(diǎn)
SEEK_SET 0 文件開始
SEEK_END 2 文件末尾
SEEK_CUR 1 文件當(dāng)前位置
假設(shè)pf已指向一個(gè)二進(jìn)制文件,則;
fseek(pf,30L,SEEK_SET)
fseek(pf,-10L*sizeof(int),SEEK_END)
對于文本文件,位移量必須是0;如:
fseek(pf,0L,SEEK_SET)
fseek(pf,0L,SEEK_END)
2. ftell函數(shù)
ftell函數(shù)用以獲得文件當(dāng)前位置指針的位置,函數(shù)給出當(dāng)前位置指針相對于文件開頭的字節(jié)數(shù).如;
long t;
t=ftell(pf);
當(dāng)函數(shù)調(diào)用出錯(cuò)時(shí),函數(shù)返回-1L.
我們可以通過以下方式來測試一個(gè)文件的長度:
fseek(fp,0L,SEEK_END);
t=ftell(fp);
3.rewind函數(shù)
調(diào)用形式為:
rewind(pf);
函數(shù)沒有返回值.函數(shù)的功能是使文件的位置指針回到文件的開頭.
13.10文件應(yīng)用
在磁盤上的test.txt文件中放有10個(gè)不小于2的正整數(shù),用函數(shù)調(diào)用方式編寫程序.要求實(shí)現(xiàn):
1,在被調(diào)函數(shù)prime中,判斷和統(tǒng)計(jì)10個(gè)整數(shù)中的素?cái)?shù)以及個(gè)數(shù).
2,在主函數(shù)中將全部素?cái)?shù)追加到磁盤文件test.txt的尾部,同時(shí)輸出到屏幕上.
#include
#include
Int prime(int a[],int n)
{
int I,j,k=0,flag=0;
for(i=0;i { for(j=2;j if(a[i]%j==0)
{ flag=0; break;}
else flag=1;
if(flag)
{a[k]=a[i];k++;}
}
return k;
}
void main(){
int n,I,a[10];
FILE *fp;
fp=fopen("test1-2.txt","r+");
for(n=0;n10;n++)
fscanf(fp,"%d",a[n]);
n=prime(a,n);
fseek(fp,o,2);
for(i=0;i {printf("%3d",a[i]);
fprintf(fp,"%3d",a[i]);
}
fclose(fp);
C語言庫函數(shù),常用庫函數(shù)有:
1、scanf格式輸入函數(shù)
2、printf格式輸出函數(shù)
3、systemdos命令函數(shù)
4、sort排序
5、main主函數(shù)
6、fgets文件讀取字符串函數(shù)
7、fputs文件寫入字符串函數(shù)
8、fscanf文件格式讀取函數(shù)
9、fprintf文件格式寫入函數(shù)
10、fopen打開文件函數(shù)
11、getchar輸入字符函數(shù)
12、putchar輸出字符函數(shù)
13、malloc動態(tài)申請內(nèi)存函數(shù)
14、free釋放內(nèi)存函數(shù)
15、abs求絕對值數(shù)學(xué)函數(shù)
16、sqrt求平方根數(shù)學(xué)函數(shù)
擴(kuò)展資料
語言組成:
1、數(shù)據(jù)類型
C的數(shù)據(jù)類型包括:整型、字符型、實(shí)型或浮點(diǎn)型(單精度和雙精度)、枚舉類型、數(shù)組類型、結(jié)構(gòu)體類型、共用體類型、指針類型和空類型。
2、常量與變量
常量其值不可改變,符號常量名通常用大寫。
變量是以某標(biāo)識符為名字,其值可以改變的量。標(biāo)識符是以字母或下劃線開頭的一串由字母、數(shù)字或下劃線構(gòu)成的序列,請注意第一個(gè)字符必須為字母或下劃線,否則為不合法的變量名。變量在編譯時(shí)為其分配相應(yīng)存儲單元。
3、數(shù)組
如果一個(gè)變量名后面跟著一個(gè)有數(shù)字的中括號,這個(gè)聲明就是數(shù)組聲明。字符串也是一種數(shù)組。它們以ASCII的NULL作為數(shù)組的結(jié)束。要特別注意的是,方括內(nèi)的索引值是從0算起的。
4、指針
如果一個(gè)變量聲明時(shí)在前面使用 * 號,表明這是個(gè)指針型變量。換句話說,該變量存儲一個(gè)地址,而 *(此處特指單目運(yùn)算符 * ,下同。C語言中另有 雙目運(yùn)算符 *) 則是取內(nèi)容操作符,意思是取這個(gè)內(nèi)存地址里存儲的內(nèi)容。指針是 C 語言區(qū)別于其他同時(shí)代高級語言的主要特征之一。
參考資料來源:百度百科-函數(shù)
C語言對文件進(jìn)行讀取之前需要先打開文件,然后再進(jìn)行讀寫,讀寫完之后關(guān)閉文件。
可以使用兩組函數(shù)實(shí)現(xiàn):
一、C語言庫函數(shù)
打開文件:fopen
讀寫(一般對應(yīng)成對使用):
fgetc---fputc fgets---fputs fread---fwrite
關(guān)閉文件:fclose
二、Linux系統(tǒng)函數(shù)
打開文件:open
讀寫(一般對應(yīng)成對使用):read---write
關(guān)閉文件:close