1. 程式人生 > >《C和指標》之“輸入輸出函式”總結

《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()只代表函式名,並不能完整的包括返回值以及引數列表情況。如需要請自行查詢!