I/O函式介紹
阿新 • • 發佈:2018-11-01
##流
什麼是流?
C裡的檔案流,C裡標準檔案方式把檔案當作流來看,也就是有一個內部緩衝buffer,每次以標準方式開啟檔案時,讀入時先將資料讀到這個緩衝區裡,寫的時候也是先寫入緩衝區裡。流分為兩種:文字流和二進位制流
1.文字流在不同的系統中實現不太相同。##檔案
2.二進位制流中的位元組完全是安照程式編寫的形式寫入到檔案和裝置中,而且完全根據他們從檔案或者裝置讀取的方式讀入到程式。
說起檔案,很多人就會想到在stdio.h裡面定義了一個FILE的結構,但是在這裡,我要說明的是,千萬不要把它和磁碟上的檔案混淆,我之前就總是認為FILE嘛,不就是個檔案嘛!再次宣告,絕對不是!!!
FILE是一種資料結構,用於訪問一個流,如果你激活了幾個流,那麼每個流都會對應一個FILE結構。
對於每一個ANSI C程式而言,至少開啟三個流:標準輸入(stdin)、標準輸出(stdout)、標準錯誤(stderr),它們都是指向FILE結構的指標。
1.程式必須給每個檔案宣告一個指標變數,這個變數的型別為FILE*,當它處於活動狀態時為流所用。##字元I/O 1. getchar和putchar函式 適用於標準輸入流和標準輸出流 例如: ``` #include
2.流通過fopen函式開啟,開啟的時候必須指定需要訪問的檔案或者裝置以及訪問方式。例如:
`FILE* fopen(const char* filename,const char*mode)`
3.根據需要對檔案進行讀取和寫入。
4.fclose函式可以關閉流,防止與它相關的檔案再次被訪問,保證儲存在緩衝區的資料被正確的寫入到檔案中。例如:
`fclose(FILE* steam)` ######I/O函式列表:</tbody>
功能 函式名 適用於 字元輸入函式 getchar 標準輸入流 字元輸出函式 putchar 標準輸出流 字元輸入函式 fgetc getc 所有輸入流 字元輸出函式 fputc putc 所有輸出流 文字行輸入函式 fgtes gets 所有輸入流 文字行輸出函式 fputs puts 所有輸出流 格式化輸入函式 scanf 標準輸入流 格式化輸出函式 printf 標準輸出流 格式化輸入函式 fscanf 所有輸入流 格式化輸出函式 fprintf 所有輸出流 二進位制輸入 fread 檔案 二進位制輸出 fwrite 檔案
putc:
C 庫函式 int putc(int char, FILE *stream) 把引數 char 指定的字元(一個無符號字元)寫入到指定的流 stream 中。
//putc例項:
#include<stdio.h>
int main()
{
FILE *pf;
char c;
pf = fopen("my file.txt", "wt");
for (c = 'A'; c <= 'Z'; c++)
{
putc(c, pf);
}
fclose(pf);
return 0;
}
getc
int getc(FILE *stream);從檔案指標stream指向的檔案流中讀取一個字元。
#include<stdio.h>
int main()
{
FILE *pf;
char c;
int n = 0;
pf = fopen("my file.txt", "r");
if (pf == NULL)
{
perror("Error opening file");
}
else
{
while (c = getc(pf) != EOF)
{
n++;
}
}
fclose(pf);
printf("檔案包含%d個字元\n", n);
return 0;
}
3. fgetc和fputc函式
適用於所有輸入流和輸出流
int fgetc( FILE *stream );
int fputc( int c, FILE *stream );
getc和fgetc功能一樣#####未格式化的行I/O 4. gets和puts函式 ``` char *gets( char *buffer ); int puts( const char *string ); ``` gets
putc和fputc功能一樣
#include<stdio.h>
int main()
{
char string[256];
printf("請輸入一個城市:");
gets(string);
printf("%s是一座古都\n",string);
return 0;
}
puts
#include<stdio.h>
int main()
{
char string[256] = {"hello,world"};
puts(string);
return 0;
}
5.fgets和fputs函式
int fputs( const char *string, FILE *stream );
char *fgets( char *string, int n, FILE *stream );
fgets
#include<stdio.h>
int main()
{
FILE *pf;
char string[100];
pf = fopen("my file.txt", "r");
if (pf == NULL)
{
perror("open file for read");
}
else
{
if (fgets(string, 100, pf) != NULL)
{
puts(string);
fclose(pf);
}
}
return 0;
}
fputs
#include<stdio.h>
int main()
{
FILE *pf;
char string[256];
printf("請輸入一句話:");
fgets(string, 256, stdin);
pf = fopen("my file.txt", "a");
fputs(string, pf);
fclose(pf);
return 0;
}
####格式化的行I/O
6.scanf和printf函式
int scanf( const char *format [,argument]... );
int printf( const char *format [, argument]... );
這兩個函式是我們所熟知且熟用的函數了!在這裡不多做說明
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
printf("請輸入a和b的值");
scanf("%d%d", &a, &b);
printf("%d+%d=%d", a, b, a + b);
return 0;
}