C語言入門教程 5 格式化輸入輸出

2022-08-24 21:36:07 字數 4958 閱讀 6363

在程式的使用中,我們經常可以看的這麼乙個場景:使用者需要輸入資料,經過程式運算,得到結果後輸出。在c語言中,輸入資料和輸出資料都是由庫函式完成的,通過語句來輸入/輸出。

c語言程式運算的結果在記憶體中,我們需要將其輸出到指定裝置中,我們才可以看到資料。printf是print format的縮寫,意思是「格式化列印」。「列印」的意思就是在螢幕上顯示內容,所以我們稱printf是格式化輸出。

在前面我們有簡單的使用過printf()函式,printf()函式的一般語法格式如下:

printf("《格式化字串》",《輸出列表》);

【例項5.1】printf()函式輸出「c語言入門教程」。

#include

intmain

()0;

}

例項解析:

printf()函式用於格式化輸出到螢幕,在標頭檔案(標準輸入輸出標頭檔案)中宣告。當編譯器呼叫printf()函式時,如果沒有標頭檔案,會發生編譯錯誤。例項中,printf()函式只有「格式化字串」,省略了「輸出列表」。該語句字串只包含的普通字元,printf()函式將其原樣輸出到螢幕上。

格式化字串中如果包含以「%」開頭的格式字元,printf()函式將資料轉換為指定的格式輸出到螢幕上。格式化字串中包含三部分,即原樣輸出文字、控制字元、轉義字元。如果輸出列表有兩個變數或者多個組成,變數之間需要用逗號隔開,多個變數與格式字串的控制字元一一對應。

輸出不同的型別需要使用不同的控制符,這裡彙總了一些常見的控制符,如下表所示。

格式字元

意義%d

輸出十進位制整數,一般對應int型別

%i輸出十進位制整數,與%d相同

%c輸出字元,一般對應char型別

%f輸出十進位制實數,一般對應float型別,也可以是double型別

%lf輸出十進位制實數,一般對應double型別,也可以是float型別

%%輸出百分號(%)

c語言中定義了一些字母前加"\"來表示那些不能直接顯示的ascii字元,稱為轉義字元。彙總了幾個常用的轉義字元,如下表所示。

轉義字元

意義\n

換行,將當前位置移到下一行開頭

\t水平製表,跳到下乙個tab位置

\\代表乙個反斜線字元'\'

【例項5.2】通過格式化輸出蓋倫屬性。

#include

intmain

()

執行以上程式,輸出結果為:

名字:g

生命值:455 移動速度:340

攻擊速度:0.625000

攻擊速度:0.625000

例項解析:

控制字元%c輸出乙個字元g,轉義字元\n代表換行。生命值和移動速度之間有乙個tab的間隔,這是因為中間有轉義字元\t。float型的控制字元既可以用%f也可以用%lf。在printf()中,%f或者%lf控制字元既可以輸出float型又可以輸出double型。但在輸入的時候則需要注意,float型對應%f,double型對應%lf,本節後面會講到。

輸入的意思是向程式填充一些資料,scanf()函式用於從標準輸入(比如鍵盤)讀取並格式化。scanf是scan format的縮寫,意思是「掃瞄格式化」。我們稱scanf是格式化輸入。

scanf()函式也是乙個標準庫函式,在標頭檔案中。scanf()函式的一般語法格式如下:

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

【例項5.3】通過格式化輸入並且輸出蓋倫屬性。

#include

intmain

()

執行以上程式,輸出結果為:

please input garenname:g

名字:g

please input garenhp and garenmovespeed:455 340

生命值:455 移動速度:340

please input garenattackspeed:0.625

攻擊速度:0.625000

例項解析:

scanf()函式不能輸出提示資訊,所以我們一般會在前面使用printf()函式來提示。例項中,please input garenname:就是提示語句,我們輸入乙個字元'g',然後回車鍵表示輸入完成。生命值和移動速度的輸入值,需要分別儲存到兩個變數中,scanf()函式使用空白字元(空格、換行、製表符tab)來分隔輸入的資料。455和340之間使用了空格來分隔也可以使用回車來分隔開,scanf()函式將455儲存到變數garenhp中,將340儲存到garenmovespeed中。使用scanf()函式當輸入資料是float型別時用%f,當輸入資料是double型別時用%lf。

注意:如果用vs遇到scanf報錯,將報錯的巨集定義(_crt_secure_no_warnings)新增到專案屬性 -- c/c++ -- 預處理器 -- 預處理器定義。要注意自己使用的除錯平台和屬性頁的配置是一致的。比如用的是debug的x64除錯,在進入專案屬性也要配置一致。

1)寬度

我們可以在scanf()函式中指定輸入的寬度,達到寬度後,後面的資料將會賦給下乙個變數,如果只有乙個變數則會將後面的資料捨棄。

scanf("%2d", &garenhp);

當輸入"455"時,將只有45儲存到變數garenhp中,其餘資料被捨棄。

scanf("%2d%d", &garenhp, &garenmovespeed);

當輸入"455"時,將45儲存到變數garenhp中,5儲存到變數garenmovespeed中。

2)星號

在格式字串中使用星號,將會跳過這個輸入值。

scanf("%d%*d%d", &garenhp, &garenmovespeed);

上面語句中,當輸入"1 2 3"時,scanf()將第乙個數1儲存到變數garenhp,第二個數2將會被跳過,然後將第三個數3儲存到變數garenmovespeed中。

getchar()函式用於接收鍵盤輸入的下乙個字元,並把它返回為乙個整數,在同乙個時間內只會讀取乙個字元。當呼叫getchar()函式時,程式就會等待。我們輸入的字元被存放在輸入緩衝區中,直到按回車為止。輸入的字元會回顯在螢幕上,能被我們所看見。getchar()函式從輸入緩衝區中讀入第乙個字元。其函式原型如下:

int

getchar

(void)

;

該函式的引數是void,不需要任何引數。當發生讀取錯誤的時候,返回-1。當讀取正確的時候,它會返回從鍵盤輸入的第乙個字元的ascii碼。

putchar()函式把字元輸出到顯示器上,並返回相同的字元,在同乙個時間內只會輸出乙個字元。其函式原型如下:

int

putchar

(int ch)

;

該函式的引數是int型別。然後引數被轉換為對應字元的ascii碼,最後輸出該ascii碼對應的字元。

【例項5.4】getchar()函式和putchar()函式

#include

intmain

()

執行以上程式,輸出結果為:

please input a ch:a

ch is:a

例項解析:

getchar()和putchar()函式也在標頭檔案中。首先定義了乙個字元型別的ch變數,然後我們從鍵盤輸入"a"加上回車。這個時候,輸入緩衝區中有字元a以及回車符號。getchar()函式從輸入緩衝區中讀取第乙個字元,將a存入到變數ch中,然後putchar()函式將其輸出。

getch()函式和前面講到的getchar()函式功能基本相同,也是接收輸入的乙個字元。getch()函式直接從鍵盤獲取值,不等待回車鍵。只要獲取到乙個值,便立即返回。getch()函式輸入的字元不回顯,我們在螢幕上也看不到。因此,getch()函式常用來做除錯。我們使用vs除錯程式時,如果不使用ctrl+f5,直接使用f5,控制台輸出視窗將會一閃而逝。我們可以在程式中加上getch()函式,讓程式暫停,這樣就不會一閃而逝了,當從鍵盤按任意鍵後程式會繼續執行。其函式原型如下:

int

getch

(void)

;

putch()函式在使用上和putchar()函式沒什麼區別,也是用來向螢幕中輸出乙個字元。其函式原型如下:

int

putch

(int ch)

;

【例項5.5】getch()函式和putch()函式

#include

#include

intmain

()

執行以上程式,輸出結果為:

a例項解析:

getch()函式和putch()函式在標頭檔案中。這個程式中,我們使用putch()函式輸出變數ch,然後呼叫getch()函式使程式暫停,從鍵盤輸入任意鍵,程式成功執行完畢。在vs2012之後,我們直接使用getch()和putch()會報錯,我們需要在前面加上下劃線變成_getch()和_putch(),像例項中一樣。

總結一下,本節內容主要介紹了c語言程式的格式化輸入和輸出。介紹了scanf()函式和printf()函式、getchar()函式和putchar()函式、getch()函式和putch()函式。

5-1 下面一段程式將會輸出什麼?

#include

intmain

()

5-2 編寫乙個程式,要求輸出兩個百分號"%%"和兩個"\"。

5-3 編寫乙個程式,要求輸入兩個變數,乙個變數代表蓋倫血量,乙個變數代表提莫攻擊力。然後模擬提莫攻擊蓋倫,輸出蓋倫剩餘血量。蓋倫剩餘血量 = 蓋倫血量 - 提莫攻擊力。

5-4 編寫乙個程式,使得輸入字元,可以直接轉換為ascii碼值。

1 格式化輸入輸出

1.格式化輸入input input 函式,通常只能返回乙個資料型別,那麼怎麼可以進行多個變數的複製呢?看下面這段 1 str1,str2 eval input 請輸入兩個字串 2 print str1,str2 3 4 num1,num2 eval input 請輸入兩個數字 5 print nu...

58 格式化輸入輸出練習

lesson 58.格式化輸入輸出練習 python格式化輸入輸出的練習 要求如下 求平均成績 python3直譯器 1 輸入學生姓名 2 依次輸入學生的語文,數學,英語三門科目成績 3 計算該學生的平均成績並列印,平均成績保留一位小數點 4 計算該學生語文成績佔總成績的百分之多少?並列印,百分比保...

C語言格式化輸入輸出

原創 2015年03月20日 20 08 32 printf 格式字串的一般形式 標誌 輸出最小寬度 精度 長度 型別 其中方括號 中的項為可選項。各項意義 1 型別 型別字元用以表示輸出資料的型別,其格式符和意義如下表所示 格式字元 意義d 以十進位制形式輸出帶符號整數 正數不輸出符號 o以八進位...