1. 先來幾個小的程式!
/*Test 1*/<br />#include <stdio.h><br />#include <stdlib.h></p><p>int main(int argc,char *argv[])<br />{<br /> printf("%d",3.14);<br /> printf("%d",(int)3.14);<br /> return 0;<br />}
/*Test 2*/<br />#include <stdio.h><br />#include <stdlib.h></p><p>int main(int argc,char *argv[])<br />{<br />char c;<br />while(c != 'a')<br />{<br />c = getchar();<br />putchar(c);<br />fflush(stdin);<br />}<br /> return 0;<br />}
運行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()只代表函數名,並不能完整的包括傳回值以及參數列表情況。如需要請自行查詢!