《C和指標》之“輸入輸出函式”總結
1. 先來幾個小的程式!
執行Test 1,發現輸出的第一個並不是3,第二次輸出的才是3。這是因為printf("%d")的格式解析原因;
執行Test 2,發現除了如果一次輸入多個字元的話,只能顯示一個字元;這就是fflush(stdin)的作用,清空緩衝區!
2. 為什麼會存在freopen()這個函式?
這是函式原型:FILE *freopen(char *filename, char *type, FILE *stream);
主要用於檔案重定向,比如freopen("1.txt","w",stdout);實現了將標準輸出定向到文字1.txt中的目的。
3. 使用%-6.10s列印會有什麼效果?
左側對其,保留10位,如不足10位並且大於6位,則全部顯示,如不足六位則佔用六位,右側使用空格補齊!
4. 使用%f列印的時候,存在著四捨五入的情況。
5. 輸入/輸出函式家族
5.1 單個字元實現
getchar()、putchar():從標準輸入讀入字元(或者向標準輸出輸出字元),是函式
getc()、fgetc()、putc()、fputc():接收(或輸出)流引數,以巨集的方式實現
5.2 一行字元實現
fgets()、gets():前者接收流引數,後者從標準輸入讀取,二者都是讀取一行內容
fputs()、puts():前者輸出流到文字中,後者從輸出文字到標準輸出上,二者都是輸出一行內容
6. 格式化輸入/輸出函式家族
6.1 格式化輸入實現
fscanf():接收一個流引數
sscanf():從記憶體緩衝區中讀取
scanf():從標準輸入中讀取
6.2 格式化輸出實現
fprintf()、sprintf()、printf()和上面的是一一對應的。
7. 除了上面處理文字,也就是ascii編碼實現的函式外,有專門的對二進位制資料進行讀寫的,分別是fread()和fwrite();
8. 改變流讀寫順序和位置函式
ftell()、fseek()、fgetpos()、fsetpos()、rewind()等。
9. 改變緩衝區的設定
setbuf()、setvbuf();後者更為通用。
10. 臨時檔案等檔案命令函式
tmpfile():建立臨時檔案
tmpnam():建立臨時檔名
remove():刪除檔案
rename():修改檔名
11. 處理錯誤函式
ferror():出現錯誤,返回錯誤資訊
clearerr():重置錯誤狀態
12. 如何得到perror函式可能列印的所有錯誤資訊列表?
注:本文中函式名func()只代表函式名,並不能完整的包括返回值以及引數列表情況。如需要請自行查詢!