C/C++輸入輸出函式(I/O)總結
在c語言的學習使用過程中,除了格式化輸入輸出外,還有很多輸入輸出函式,包括字串輸入輸出、檔案輸入輸出等。在使用的過程中一直沒有認真總結過,在這裡把以前學的好好總結一下,以便時間長了又忘記了。
字串輸入輸出
1、輸入函式:gets、fgets、scanf
gets 遇到換行符時結束,不讀取換行符,自動在字串後面加上空字元(/0); 返回值是指向char的指標(和傳遞給他的是同一個指標),到結尾時返回空指標。
char name[80];
printf("please enter your name");
gets(name);
fgets 遇到換行符或者到最多讀入字元處結束,並把換行符儲存到檔案中。第二個引數說明最大讀入字元數,stdio指從鍵盤上讀取。
char name[80];
char* ptr;
printf("please enter your name");
ptr=fgets(name,80,stdin);
scanf 返回一個整數值,表示成功讀取的專案數,遇到檔案結尾時返回一個 EOF。
char name1[10];
char name2[10];
printf("please enter 2 name");
scanf("%5s %10s",name1,name2);
2、輸出函式:puts、fputs 、printf
char str[100]=" I'm a chinese, i love my hometown." ;
puts(str);
puts遇到空字元是停止,並在字串結尾新增換行符;經常和gets配合使用。從螢幕讀取一行並顯示在下一行如下所示:
char str[100];
while(gets(str))
puts(str);
fputs 不新增換行符,stdout是指輸出到螢幕,經常和fputs一起使用。從螢幕讀取一行並顯示在下一行如下所示:
char str[100];
while(fgets(str,100,stdin))
fputs(str,stdout);
printf 輸出比較麻煩,而且計算機執行時間比較長,但是在一行中輸出多個字串時候比較簡單。
char str[100]=" I'm a chinese, i love my hometown.";
printf("%s\n",str);
printf("%s,%s\n",name,id);
檔案輸入輸出
1、fopen、fclose
int ch;
FILE* fp;
fp=fopen("a.txt","r");
while((ch=getc(fp)!=NULL)
{
putchar(ch);
}
fopen 返回一個 FILE 檔案指標,第一個引數表示要讀取的檔名,也可以在前面加上檔案路徑,第二個引數辨識讀取模式,通常包括:
“r”只讀,“w”只寫,,”a“向檔案末尾寫,等。
if(fclose(fp)!=0)
printf("error in closing file");
fclose 檔案成功關閉,返回0,否則,返回EOF。
2、fprintf、fscanf
if ((fp=fopen("a","r+"))==NULL)
{
fprintf(stdout,"cant open \"a\"file.\n");
exit(1);
}
fprintf、fscanf 和 printf、scanf 相似,只是要指定合適的檔案。
while(fscanf(fp,"%s","a")==1)
puts(a);
3、fgets、fputs
char str[100];
while (fgets(str,100,stdin)!=NULL && str[0]!='\n'
fputs(str,stdout);
har str[100];
while (fgets(str,100,a)!=NULL && str[0]!='\n'
fputs(str,a);
a為檔名。fgets保留了輸入中的換行符,fputs 不會自動新增換行符。
4、fseek、ftell
fseek 第一個引數是檔案指標,第二個引數是偏移量,第三個引數是起始點位置,可以是 SEEK_SET 、SEEK_CUR、 SEEK_END,表示檔案開始,當前位置,檔案結尾。ftell 返回檔案的當前位置。
File * fp;
long last;
fseek(fp,0L,SEEK_END);
last=ftell(fp);
5、fread、fwrite
fread、fwrite 用於位二進位制檔案的讀取;
fwrite 第一個引數表示資料的來源,第二個引數表示每個物件的大小,對三個引數表示物件的大小,第四個引數表示要寫入的檔案。
fread 第一個引數表示讀取資料的儲存位置,第二個引數表示每個物件的大小,對三個引數表示物件的大小,第四個引數表示要讀取的檔案。
File * fp;
double line[256];
fwrite(line,sizeof(double),256,fp)
File * fp;
double line[256];
fread(line,sizeof(double),256,fp)
第一個例子表示將line中256個double資料寫入fp中;
第二個例子表示將fp中256個double資料讀取,存入line中。