C語言標準輸入輸出詳解

2021-03-04 09:44:40 字數 5273 閱讀 5110

c輸入輸出函式

本節主要介紹turbo c2.0標準輸入輸出函式和檔案的輸入輸出函式。通過本

節的學習可以使讀者掌握turbo c2.0的螢幕輸出、鍵盤輸入輸出以及磁碟檔案的

讀寫函式, 並能開始進行一些簡單的程式的編寫。

控制流程語句主要包括: 條件語句、迴圈語句和開關語句。

1.1 標準輸入輸出函式

1.1.1 格式化輸入輸出函式

turbo c2.0 標準庫提供了兩個控制台格式化輸入、 輸出函式printf( ) 和

scanf(), 這兩個函式可以在標準輸入輸出裝置上以各種不同的格式讀寫資料。

printf()函式用來向標準輸出裝置(螢幕)寫資料; scanf() 函式用來從標準輸入

裝置(鍵盤)上讀資料。下面詳細介紹這兩個函式的用法。

一、printf()函式

printf()函式是格式化輸出函式, 一般用於向標準輸出裝置按規定格式輸出

資訊。在編寫程式時經常會用到此函式。printf()函式的呼叫格式為:

printf("《格式化字串》", 《參量表》);

其中格式化字串包括兩部分內容: 一部分是正常字元, 這些字元將按原

樣輸出; 另一部分是格式化規定字元, 以"%"開始, 後跟乙個或幾個規定字元,

用來確定輸出內容格式。

參量表是需要輸出的一系列引數, 其個數必須與格式化字串所說明的輸出

引數個數一樣多, 各引數之間用","分開, 且順序一一對應, 否則將會出現意想

不到的錯誤。

1. 格式化規定符

turbo c2.0提供的格式化規定符如下:

符號作用

%d 十進位制有符號整數

%u 十進位制無符號整數

%f 浮點數

%s 字串

%c 單個字元

%p 指標的值

%e 指數形式的浮點數

%x, %x 無符號以十六進製制表示的整數

%0 無符號以八進位制表示的整數

%g 自動選擇合適的表示法

說明:(1). 可以在"%"和字母之間插進數字表示最大場寬。

例如: %3d 表示輸出3位整型數, 不夠3位右對齊。

%9.2f 表示輸出場寬為9的浮點數, 其中小數字為2, 整數字為6,

小數點佔一位, 不夠9位右對齊。

%8s 表示輸出8個字元的字串, 不夠8個字元右對齊。

如果字串的長度、或整型數字數超過說明的場寬, 將按其實際長度輸出。

但對浮點數, 若整數部分位數超過了說明的整數字寬度, 將按實際整數字輸出;

若小數部分位數超過了說明的小數字寬度, 則按說明的寬度以四捨五入輸出。

另外, 若想在輸出值前加一些0, 就應在場寬項前加個0。

例如: %04d 表示在輸出乙個小於4位的數值時, 將在前面補0使其總寬度

為4位。

如果用浮點數表示字元或整型量的輸出格式, 小數點後的數字代表最大寬度,

小數點前的數字代表最小寬度。

例如: %6.9s 表示顯示乙個長度不小於6且不大於9的字串。若大於9, 則

第9個字元以後的內容將被刪除。

(2). 可以在"%"和字母之間加小寫字母l, 表示輸出的是長型數。

例如: %ld 表示輸出long整數

%lf 表示輸出double浮點數

(3). 可以控制輸出左對齊或右對齊, 即在"%"和字母之間加入乙個"-" 號可

說明輸出為左對齊, 否則為右對齊。

例如: %-7d 表示輸出7位整數左對齊

%-10s 表示輸出10個字元左對齊

2. 一些特殊規定字元

字元作用

\n 換行

\f 清屏並換頁

\r 回車

\t tab符

\xhh 表示乙個ascii碼用16進表示,

其中hh是1到2個16進製制數

由本節所學的printf()函式, 並結合上一節學習的資料型別, 編制下面的程

序, 以加深對turbo c2.0資料型別的了解。

例1#include

#include

int main()

上面結果中的位址值在不同計算機上可能不同。

例1.中第一條語句#include的含義是呼叫另乙個檔案stdio.h, 這

是乙個標頭檔案, 其中包括全部標準輸入輸出庫函式的資料型別定義和函式說明。

turbo c2.0對每個庫函式便用的變數及函式型別都已作了定義與說明, 放在相應

標頭檔案"*.h"中, 使用者用到這些函式時必須要用#include<*.h>或#include"*. h"

語句呼叫相應的標頭檔案, 以供連線。若沒有用此語句說明, 則連線時將會出現錯

誤。二、scanf()函式

scanf()函式是格式化輸入函式, 它從標準輸入裝置(鍵盤) 讀取輸入的資訊。

其呼叫格式為:

scanf("《格式化字串》", 《位址表》);

格式化字串包括以下三類不同的字元;

1. 格式化說明符: 格式化說明符與printf()函式中的格式說明符基本相同。

2. 空白字元: 空白字元會使scanf()函式在讀操作中略去輸入中的乙個或多

個空白字元。

3. 非空白字元: 乙個非空白字元會使scanf()函式在讀入時剔除掉與這個非

空白字元相同的字元。

位址表是需要讀入的所有變數的位址, 而不是變數本身。這與printf()函式

完全不同, 要特別注意。各個變數的位址之間同","分開。

例2:main()

上例中的scanf()函式先讀乙個整型數, 然後把接著輸入的逗號剔除掉, 最

後讀入另乙個整型數。如果","這一特定字元沒有找到, scanf()函式就終止。若

引數之間的分隔符為空格, 則引數之間必須輸入乙個或多個空格。

說明:(1). 對於字串陣列或字串指標變數, 由於陣列名和指標變數名本身就

是位址, 因此使用scanf()函式時, 不需要在它們前面加上"&"操作符。

例3mian()

(2). 可以在格式化字串中的"%"各格式化規定符之間加入乙個整數, 表示

任何讀操作中的最大位數。

如例3中若規定只能輸入10字元給字串指標p, 則第一條scanf() 函式語句

變為 scanf("%10s", p);

程式執行時一旦輸入字元個數大於10, p就不再繼續讀入, 而後面的乙個讀

入函式即scanf("%s", str)就會從第11個字元開始讀入。

實際使用scanf()函式時存在乙個問題, 下面舉例進行說明:

當使用多個scanf()函式連續給多個字元變數輸入時, 例如:

main()

執行該程式, 輸入乙個字元a後回車 (要完成輸入必須回車), 在執行scanf

("%c", &c1)時, 給變數c1賦值"a", 但回車符仍然留在緩衝區內, 執行輸入語句

scanf("%c", &c2)時, 變數c2輸出的是一空行, 如果輸入ab後回車, 那麼輸出結

果為: c1 is a, c2 is b。

要解決以上問題, 可以在輸入函式前加入清除函式fflush()( 這個函式的使

用方法將在本節最後講述)。修改以上程式變成:

#include

main()

1.1.2 非格式化輸入輸出函式

非格式化輸入輸出函式可以由上面講述的標準格式化輸入輸出函式代替, 但

這些函式編譯後**少, 相對占用記憶體也小, 從而提高了速度, 同時使用也比較

方便。下面分別進行介紹。

一、puts()和gets()函式

1. puts()函式

puts()函式用來向標準輸出裝置(螢幕)寫字串並換行, 其呼叫格式為:

puts(s);

其中s為字串變數(字串陣列名或字串指標)。

puts()函式的作用與語printf("%s\n", s)相同。

例4:main()

說明:(1). puts()函式只能輸出字串, 不能輸出數值或進行格式變換。

(2). 可以將字串直接寫入puts()函式中。如:

puts("hello, turbo c2.0");

2. gets()函式

gets()函式用來從標準輸入裝置(鍵盤)讀取字串直到回車結束, 但回車符

不屬於這個字串。其呼叫格式為:

gets(s);

其中s為字串變數(字串陣列名或字串指標)。

gets(s)函式與scanf("%s", &s)相似, 但不完全相同, 使用scanf("%s", &s)

函式輸入字串時存在乙個問題, 就是如果輸入了空格會認為輸入字串結束,

空格後的字元將作為下乙個輸入項處理, 但gets() 函式將接收輸入的整個字元

串直到回車為止。

例5main()

說明:(1). gets(s)函式中的變數s為一字串。如果為單個字元, 編譯連線不會

有錯誤, 但執行後會出現"null pointer asignmemt"的錯誤。

二、putchar()、getch()、getche()和getchar()函式

1. putchar()函式

putchar()函式是向標準輸出裝置輸出乙個字元, 其呼叫格式為:

putchar(ch);

其中ch為乙個字元變數或常量。

putchar()函式的作用等同於printf("%c", ch);

例6:#include

main()

從本例中的連續四個字元輸出函式語句可以分清字元變數的不同賦值方法。

2. getch()、getche()和getchar()函式

(1) getch()和getche()函式

這兩個函式都是從鍵盤上讀入乙個字元。其呼叫格式為:

getch();

getche();

兩者的區別是: getch()函式不將讀入的字元回顯在顯示螢幕上, 而getche()

函式卻將讀入的字元回顯到顯示螢幕上。

例7:#include

main()

利用回顯和不回顯的特點, 這兩個函式經常用於互動輸入的過程中完成暫停

等功能。

例8:#include

main()

(2) getchar()函式

getchar()函式也是從鍵盤上讀入乙個字元, 並帶回顯。它與前面兩個函式

的區別在於: getchar()函式等待輸入直到按回車才結束, 回車前的所有輸入字

符都會逐個顯示在螢幕上。但只有第乙個字元作為函式的返回值。

getchar()函式的呼叫格式為:

getchar();

例9:#include

main()

數字輸入輸出

數字輸入 輸出就是二進位制值輸入 輸出如開關接通是1,斷開是0 輸入裝置向計算機輸入資料和資訊的裝置。是計算機與使用者或其他裝置通訊的橋梁。輸入裝置是使用者和計算機系統之間進行資訊交換的主要裝置之一.鍵盤,滑鼠,攝像頭,掃瞄器,光筆,手寫輸入板,遊戲杆,語音輸入裝置等都屬於輸入裝置 input de...

輸入輸出系統

輸入輸出系統是計算機系統中的主機與外部進行通訊的系統。它由外圍裝置和輸入輸出控制系統兩部分組成,是計算機系統的重要組成部分。外圍裝置包括輸入裝置 輸出裝置和磁碟儲存器 磁帶儲存器 光碟儲存器等。從某種意義上也可以把磁碟 磁帶和光碟等裝置看成一種輸入輸出裝置,所以輸入輸出裝置與外圍裝置這兩個名詞經常是...

C流格式控制的輸入輸出

1.用ios類成員函式進行格式化 狀態標誌 ios類中定義的列舉 enum 狀態標誌是乙個long型別的長整數,這些列舉值可以作為x flags上的每一位的標誌,若定義了某一項,則x flags中的某一位為1,否則為0。用成員函式對狀態標誌進行操作 include using namespace s...