c語言中輸入/輸出採用流的概念,流就是記憶體中的一塊地區。當一個程式運行是,需要有資料的流動,或者是程式需要一些外部提供的參數來進行運算,或者是程式經過運算產生一些資料要進行儲存或傳遞到別的程式等,這也就是我們說的輸入資料流(前者)和輸出資料流(後者)。也就是說程式關心的是建立正確的輸出位元組資料,以及正確的解釋從輸入讀取的位元組資料。
既然流是有一塊緩衝區,那麼它就一定有緩衝作用。當作業系統能夠確定當前輸入/輸出跟互動沒有關係時,採用完全緩衝方式(當緩衝區滿了以後再進行重新整理);例如當從標準輸入時,就不會採用完全緩衝,見代碼:
viod f(){
printf("請輸入資料: ");
scanf("%d",&n);
}
當我們輸入時,螢幕上會先顯示“請輸入資料: ”,這也就是說在我們從標準輸入輸資料是,標準輸出也會同步重新整理。
在C語言中流分為文字資料流和二進位流,二進位流就是把記憶體中的東西直接進行複製,不會在進行轉換,一般編寫網路程式時會用到。C語言中的stdio.h主要提供的操縱流的函數。
開啟流
FILE *fopen(char const *name, char const *mode);
FILE *freopen(char const *name, char const *mode, FILE *stream);
關閉流
int fclose(FILE * f);
單個字元輸入:
int getchar();
int fgetc(FILE *stream);
int getc(FILE *stream);
單個字元的輸出:
int putchar(int ch);
int fputc(int ch, FILE *stream);
int putc(int ch, FILE *stream);
未格式化的行輸入/輸出:
char *fgets(char *buffer, int buffer_size, FILE *stream);
char *gets(char *buffer);
int fputs(char *buffer, FILE *stream);
int puts(char *buffer);
格式化的行輸入輸出:
int printf(char const *format,...);
int fprintf(FILE *stream, char const *format, ...);
int sprintf(char *buffer, char const *format, ...)
int scanf(char const *format, ...);
int fscanf(FILE *stream, char const *format, ...);
int scanf(char const *string,char const *format, ...);
錯誤報表:
void perror(char const *message);//當調用標準庫函數失敗時,編譯器會把一個外部整型變數errno(在errno.h中)設定值,然後傳遞給使用者,提示出錯原因,perror簡化了這個過程,當出錯時,perror輸出message的內容,然後一個分號和一個空格,然後列印用於解釋errno錯誤碼的資訊。
void exit(int status);//參數用EXIT_SUCCESS或EXIT_FAILURE