C語言入門教程 3 2 資料的輸入 與 輸出

2021-09-07 06:52:22 字數 4902 閱讀 8511

在程式的執行過程中,通常需要使用者輸入一些資料,而程式運算所得到的計算結果等又需要輸出給使用者,由此實現人與計算機之間的互動。所以在程式設計中,輸入輸出語句是一類必不可少的重要語句。在 c 語言中,沒有專門的輸入輸出語句,所有的輸入輸出操作都是通過對標準輸入輸出庫函式(包含在 「stdio.h」 標頭檔案中)的呼叫實現。最常用的輸入輸出函式有 scanf()、printf()、getchar()、putchar()。

3.2.1 scanf()函式

格式化輸入函式 scanf() 的功能是從鍵盤上輸入資料,所獲得的資料按指定輸入格式被賦給相應的輸入項。函式一般形式為:

scanf("控制字串",輸入項列表);

其中控制字串規定資料的輸入格式,必須用雙引號括起,其內容是由格式說明和普通字元兩部分組成。輸入項列表則由乙個或多個變數位址組成,當變數位址有多個時,各個變數位址之間用逗號「,」分隔。

scanf()函式輸入項列表中各變數要加取位址操作符,就是變數名前加 「&」,只有這樣函式才能改變其值。輸入型別與變數型別應盡量一致,已避免型別不匹配而造成的錯誤。

控制字串由兩個組成部分 -- 格式說明 和 普通字元。格式說明規定了輸入項中的變數以何種型別的資料格式被輸入,形式是:

%《修飾符》格式字元

修飾符是可選的,用以表示輸入字段寬度、約定整數是短整型還是長整型、是否遮蔽輸入的資料。格式字元用以約定輸入資料的資料型別,如下表所示:

輸入格式字元

格式字元

說明格式字元說明d

輸入乙個十進位制整數

e輸入乙個指數形式的浮點數

o輸入乙個八進位制整數

c輸入乙個字元

x輸入乙個十六進製制整數

s輸入乙個字串

f輸入乙個小數點形式的浮點數

如果需要輸入乙個十進位製長整型資料,且規定字段寬度為 9 位有效數字,可用下面的**完成:

long a;				// 宣告乙個長整型變數

scanf("%91d", &a) // 輸入乙個字段寬度為 9 位有效數字的十進位制整型資料,儲存到變數 a 中

程式執行時,會要求在終端上輸入資料,輸入後按 enter 鍵,程式繼續執行。假如輸入的資料是 1234567890,那麼前 9 位數字將作為有效的輸入,變數 a 儲存的數值為 123456789。在需要遮蔽輸入的某個資料時,可使用修飾符 「*」,如下例所示:

char c1, c2, c3;					// 宣告 3 個字元型變數

scanf("%c%*c%c", &c1, &c2, &c3); // 輸入 3 個字元型資料,分別儲存在變數 c1、c2、c3中,但 c2 對應的輸入資料被遮蔽

當輸入的資料為 abc 時,變數 c1 中儲存的字元型資料為 a,變數 c3 儲存的資料為 c,變數 c2 沒有儲存任何資料,仍然是未賦值狀態。

控制字串的普通字元主要是用作多個資料間的分隔,或者表示某種特定的輸入格式。例如,通常用空格或者逗號來表示多個資料之間的分隔,如下例所示:

int a, b, c;						// 宣告 3 個整型變數

scanf("%d, %d, %d", &a, &b, &c); // 輸入 3 個整型資料,分別儲存在變數 a、b、c中

控制字串中,3 個輸入格式說明被用逗號隔開,所以如果要為變數正確賦值,輸入時必須遵循這種格式,如輸入 12,15,18。假如輸入的資料是 12 15 18,資料間用空格分隔,那麼就與規定的格式不符,上例中只有第乙個變數 能被正確賦值。另外,像換行符、製表符這樣的轉義字元也可以被用作輸入資料間的分隔。

3.2.2 printf()函式

與格式化輸入函式相對應的是格式化輸出函式 printf(),作用是按 「控制字串」 規定的格式向終端輸出資料。其基本格式為:

printf("控制字串",輸出項列表);

控制字串由格式說明和普通字元兩部分組成,必須用雙引號包圍。格式說明一般形式為:

%《修飾符》格式字元

格式字元規定了對應輸出項的輸出格式,常用格式字元如下表所示:

輸出格式字元

說明格式字元說明d

輸出乙個十進位制整數

e輸出乙個指數形式的浮點數

u輸出乙個無符號十進位制整數

g自動選擇 f 和 e 格式中較短的形式輸出

o輸出乙個八進位制整數

c輸出乙個字元

x輸出乙個十六進製制整數

s輸出乙個字串

f輸出乙個小數點形式的浮點數

修飾符是可選的,用於確定資料輸出的寬度、精度、小數字數、對齊方式等,從而產生更規範整齊的輸出。當沒有修飾符時,以上各項按系統預設設定顯示。如下例所示:

int a = 123;				// 定義乙個整型變數並賦值

float b = 45.6789; // 定義乙個浮點型變數並賦值

printf("%5d-%5.2f", a, b); // 格式化輸出變數 a 和 b,變數 a 字段寬度為 5,變數 b 在小數點前欄位寬度為 5,小數點後為 2

**中,printf()函式輸出的結果為:

123-  45.68

控制字串中輸出的整數的字段寬度為 5 位,變數 a 的寬度為 3 位,不足的 2 位由空格補齊;輸出的浮點型數的小數點前 5 位,而變數 b 小數點前為 2 位,不足的 3 位由空格補齊,小數點後是 2 位,而變數 b 小數點後為 4 位,輸出函式會自動進行四捨五入運算。如果整型資料或浮點數整型部分對應的輸出位數比實際要短,那麼會被自動加長補齊。

用負號做修飾符,則可規定字段寬度在大於變數實際長度時,輸出資料的對齊方式。如下例所示:

int a = 123;			// 定義乙個整型變數並賦值

printf("%-5\n", a); // 格式化輸出變數 a,輸出的數值向左對齊

printf("%5d\n", a); // 格式化輸出變數 a,輸出的數值向右對齊,這是預設值

輸出結果:

123  

123

這段**分兩行輸出變數 a 的值,第一行因為使用了向左對齊的符號,所以變數 a 的值以左對齊方式輸出。第二行則是以預設方式右對齊輸出。

修飾符中 l 和 h 可以規定是以長型還是短型輸出資料,例如 %hd 表示短整型,%lf 表示雙精度浮點型,%ld 表示長整型,%hu 表示無符號短整型。

格式化輸出函式還可以直接將字串常量放在格式說明語句中輸出,但通常是將字串常量與輸出格式字元組合使用,以實現各種輸出效果。如下例所示:

float sec1, sec2;							// 定義兩個浮點型變數,表示某學生第一和第二學期的成績

sec1 = 88.0; // 為變數賦值

sec2 = 79.5;

printf("第一學期成績是:%2.1f\n", sec1); // 輸出第一學期成績

printf("第二學期成績是:%2.1f\n", sec2); // 輸出第二學期成績

printf("總分是:%3.1f,平均分是:%2.1f\n",

sec1 + sec2, (sec1 + sec2) / 2); // 輸出兩學期的總分和平均分

輸出結果:

第乙個學期成績是:88.0

第二個學期成績是:79.5

總分是:167.5,平均分是:83.8

該**將把格式說明語句中的字串常量和輸出項列表裡的變數值一同輸出。可見,輸出格式字元的作用彷彿是執行時被輸出項的值替換。輸出項也可以是表示式,如**第 7 行所示。另外,**最後一行被分做兩行書寫,這是為了閱讀方便,c 語言裡是允許的。

3.2.3 getchar()函式 與 putchar() 函式

getchar()函式的作用是從終端獲得乙個字元,putchar()函式的作用是向終端輸出乙個字元。與前面介紹的兩個輸入輸出函式不同的是,getchar() 與 putchar() 函式每次只能操作乙個 ascii **。因此,在設計基於文字介面的簡單應用程式時,常利用這一特性實現選單選擇的輸入和使用者確認的輸入。

getchar()沒有任何引數,使用方法是直接返回乙個字元。putchar()是用乙個字元型資料作為引數,執行時直接將該字元型資料輸出到終端上。下例將實現乙個執行在終端上的文字選單:

#include int main()

else if (ch == '2') // 判斷所輸入的字元是否為 2

else // 將 1 和 2 以外的字元作為非法輸入處理

printf("\n 按任意鍵退出程式"); // 操作等待提示

getchar(); // 輸入任意字元後繼續執行

return 0; // 程式結束

}

**第 4 行使用 getchar() 函式將輸入的字元儲存在字元型變數 ch 中。第 5 行至第 13 行,根據 ch 的值判斷所需執行的語句。**第 15 行只使用了 getchar() 函式而沒有變數與之相連線,程式執行到這條語句時被該函式中斷執行等待輸入。而輸入的任何數值都不會被儲存,這就是在文字介面程式中常見的使用者確認功能實現方法。

注意:getchar() 與 putchar() 函式包含在標頭檔案 stdio.h 中,使用前必須用 「#include 」 命令將該標頭檔案包含在**中,否則編譯器會出現警告提示。

C 入門教程2 輸入與輸出

程式輸入有幾個語句,常用的是這幾個 上期提到的cin和scanf語句 cin語句可以連著用,比如 cin a b 但不能cin a,b 輸入怎麼用呢,首先我們要定義變數 怎麼定義變數,我們下下期具體講,這期就大致了解 例如 include using namespace std intmain 就做...

C語言入門教程2

要利用計算機處理問題,光學習語言的語法規則還不夠,最重要的是要學會針對各型別的問題,擬定出有效的解題方法和步驟。解題方法和步驟就是演算法。演算法 為了解決乙個問題而採取的有限步驟。計算機演算法 如何使計算機一步一步地工作的具體過程。利用計算機處理問題的步驟 1 設計好演算法 演算法設計 2 用計算機...

C語言入門教程 2 4 浮點型資料

浮點型資料又稱實型資料,是乙個以十進位制表示的符號實數。符號實數的值包括整數部分 尾數部分和指數部分。2.4.1 浮點型常量 一些較大的數值,或者有小數字 指數字的數值都需要用浮點型常量表示。浮點型常量的形式是 正負符號 數值 數值 e e 正負符號 數值 其中,數值 是一位或多位十進位制數字,e ...