程序輸入與輸出
當我們操作一個linux終端的時候,執行linux命令程序,可以看到命令的輸出信息,或者要求輸入數據。那么,這些操作就是linux命令程序與用戶進行交互。程序與用戶的交互過程,可以認為是程序的輸入與輸出過程。這里我們先介紹程序在終端的輸入與輸出;當介紹到文件操作的時候,程序可以與硬盤進行輸入輸出的操作。
printf函數
在編程的過程中,我們需要輸出一些有用的調試日志信息,便于跟蹤調試程序。例如,我們想知道在程序運行的過程中,某一個變量的值,某一個內存地址的值,或者提示用戶,當前程序正在進行什么工作。那么,這一切都離不開printf()函數。
在C語言的庫函數中,提供了printf()函數,能夠輸出多種數據格式,非常有用于調試輸出信息。更高級的使用,可以配合sprintf()或snprintf()函數,可以把數據格式化輸出到內存塊中,方便快速組合出有用的字符串格式。
首先,我們來看看printf()函數,如下是一個簡單的測試例子:

程序運行的結果如下:

可以看到,在printf()函數中,把age變量的值給打印出來,讓我們可以看到程序里,某一個變量的內容。此時,我們知道了printf()函數的作用,那么,下面來看看printf()函數的定義格式和各種使用方式。
2.1 printf函數定義和基本使用
C語言提供的printf()函數定義如下:
int printf(const char* format_str, [argument list]);
函數分析:
(1) 參數 format_str 是控制格式輸出字符串;
(2) 參數 argument list 是參數列表,該參數是可選參數,不是必須要設置的,可以為空;
(3) 函數的返回值是int類型,是實際打印輸出的字符個數;
如下是一個程序測試例子:

程序運行的結果如下:

就是只輸出一串字符串。在這個例子中,printf()函數的參數只攜帶了控制格式輸出字符串,不攜帶參數列表。所以,它的作用就只是輸出一串字符串。
2.2 printf函數輸出格式
1 輸出字符和字符串
格式轉換符有:
(1) %c --- 輸出一個字符;
(2) %s --- 輸出一個字符串;
如下是程序測試例子:

程序運行的結果如下:

通過測試例子,可以知道:
(1) %c 格式,把變量a存儲的數據當作一個字符輸出;
(2) %s 格式,把變量pstr指向的字符串輸出;
2 輸出有符號和無符號整數
格式轉換符有:
(1) %d --- 輸出有符號數的十進制格式;
(2) %u --- 輸出無符號數的十進制格式;
如下是程序測試例子:

程序運行的結果如下:

通過測試例子,可以知道:
(1) %d 格式,輸出有符號數的十進制格式,例如上面的例子中,把255這個數值存放到a變量,由于a是char類型,只有1個字節的容量。255表示的二進制是1111 1111,最高位是符號位,符號位為1表示負數。最終,表示的負數是:數值位取反,得到000 0000,然后,再加1,就得到 000 0001,所以,就是-1這個數值。
(2) %u 格式,輸出無符號數的十進制格式,在上面的例子中,unsigned 指定變量是無符號類型,所以,unsigned char 這個類型表示的1個字節中,沒有符號位,一個字節中的8位都是數值位,所以,存放的二進制是 1111 1111表示的數值就是255。
3 輸出十六進制和八進制
格式轉換符有:
(1) %x --- 輸出數值是十六進制格式,是小寫字符;
(2) %X --- 輸出數值是十六進制格式,是大寫字符;
(3) %o --- 輸出數值是八進制格式;
如下是程序測試例子:

程序運行的結果如下:

通過測試例子,可以知道:
(1) %x格式,把變量x存放的數據值,以十六進制格式輸出,如果輸出十六進制有字母,則以小寫格式表示。
(2) %X格式,就是大寫的X字母,以十六進制格式輸出變量x的值,如果輸出的十六進制有字母,則以大寫格式表示。
(3) %o格式,是以八進制格式輸出數值。
4 浮點數
格式轉換符有:
(1) %f --- 以浮點數的格式輸出數值,就是帶小數點的數據;
(2) %e --- 以科學計數法e的方式輸出浮點數;
如下是程序測試例子:

程序運行的結果如下:

通過測試例子,可以知道:
(1) %f格式,輸出帶有小數點的浮點數;
(2) %e格式,以科學計數法e的方式輸出浮點數的值,例如上面的例子中,輸出:
x1 = 1.250000e+01
根據科學計數法e的表示格式,e字母后面帶數值N表示10的N次方。那么,1.250000e+01這個數值中,e字母后面帶有數值1,表示10的1次方。所以有:
1.250000e+01 = 1.250000 * 10^1 = 1.250000 * 10 = 12.5
所以對于x這個數值,使用%f, %e格式表示,都是相同的值。
5 轉移字符
轉移字符格式有:
(1) n --- 換行;
(2) t --- 水平跳格,如同按下TAB按鍵;
(3) r --- 回到當前行的開始位置;
(4) ’ --- 輸出單引號;
(5) ” --- 輸出雙引號;
(6) \ --- 輸出一條反斜杠;
如下是程序測試例子:

程序運行的結果如下:

其中,注意:
printf("abcwwwr123n");
開始在新的一行輸出 abcwww,然后,遇到 r 的時候,回到行的開始位置,就回到字符a這個位置,然后,再輸出123,此時,新輸出的123字符就把abc字符給覆蓋。最終,輸出123www這樣的字符。