C語言IO函式總結
阿新 • • 發佈:2018-12-23
一.只用於標準輸入(stdin)和標準輸出(stdout)的函式
1.getchar putchar
2.gets puts
- gets:從標準輸入讀字元。直到出現換行符或讀到檔案結尾為止。不會檢測空間是否足夠,會造成空間越界。
- puts:向標準輸出裝置輸出一個字串,會自動新增換行符。
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> int main(int argc, char *argv[]) { char arr[8] = ""; int len = sizeof(arr) / sizeof(arr[0]); printf("請輸入小於%d個字元的字串:\n", len); gets(arr);//執行時會出現斷錯誤 system("pause"); return 0; }
3.sanf printf
- sanf:遇到空格、回車、tab鍵都會結束輸入。即不提取後面繼續輸入的字元。
4.sscanf sprintf
scanf:解包
- 遇到空格、回車、\0、\t、\v、\f。均結束提取(簡單地說就是空白字元與\0都會結束sscanf的提取)。
- sscanf(buf, "%c3%c", &ch1, &ch2); buf與format字串中有匹配項可以跳過,比如3。
- 跳過資料:%*d %*s
- 指定提取寬度:%3s %*2s
- 指定提取範圍:[a~zA~Z0~9] [aBc]
- 取反%[^a]
sprintf:組包
- 格式化字串
- 字串連線
- 把數字轉成字串
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> int main(int argc, char *argv[]) { //注意:xx個數並沒有限制 printf("請輸入一個格式為[email protected]_ming.com的郵箱:"); char arr[64] = ""; scanf("%s", arr); char msg[32] = ""; //sscanf(arr, "%*[^@]@%[^.]", msg); //sscanf(arr, "%*[^@]%*[@]%[^.]", msg); //sscanf(arr, "%*[^@]%*[@]%s%[^.]", msg); sscanf(arr, "%*[^@]%*[@]%s.", msg); printf("%s\n", msg); system("pause"); return 0; }
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char *argv[])
{
//格式化字串
char arr[32] = "";
sprintf(arr, "%s%s", "我是xiao_ming", " 今年17歲");
//連線字串
char src[32] = "hello";
char dst[32] = " world";
sprintf(dst, src);
printf("%s\n", dst);
//把數字轉成字串
char buf[32] = "";
sprintf(buf, "%d", 1000);
printf("%s\n", buf);
system("pause");
return 0;
}
二.可用於所有流的輸入輸出函式
1.fgetc(getc) fputc(putc)
2.fgets fputs
3.fprintf fscanf
4.fread fwrite
三.檔案的開啟和關閉
- FILE *fp = fopen("file_name", "mode"); 成功返回檔案指標,失敗返回NULL。
- int fclose(FILE* stream); 成功返回0,失敗返回-1。
開啟模式 |
含義 |
r或rb |
以只讀方式開啟一個文字檔案(不建立檔案,若檔案不存在則報錯) |
w或wb |
以寫方式開啟檔案(如果檔案存在則清空檔案,檔案不存在則建立一個檔案) |
a或ab |
以追加方式開啟檔案,在末尾新增內容,若檔案不存在則建立檔案 |
r+或rb+ |
以可讀、可寫的方式開啟檔案(不建立新檔案) |
w+或wb+ |
以可讀、可寫的方式開啟檔案(如果檔案存在則清空檔案,檔案不存在則建立一個檔案) |
a+或ab+ |
以新增方式開啟檔案,開啟檔案並在末尾更改檔案,若檔案不存在則建立檔案 |
注意:b表示二進位制模式,二進位制模式只在window下有效,在linux中是無效的。linux下所有的文字檔案都以\n結尾。在window下二進位制讀取模式時可以獲得\r\n。
四.檔案的隨機(指定位置)讀取
- 移動檔案流指標:int fseek(FILE* stream, long offset, int whence); 開始:SEEK_SET 當前位置:SEEK_CUR 檔案末尾:SEEK_END
- 獲取流指標的位置:long ftell(FILE* stream);
- 將流指標移到檔案開頭:void rewind(FILE* stream);