C語言快速入門手冊4.格式字符串

4.1.字符串

C語言的字符串是一種組合類型,它的結(jié)構(gòu)類似列表,C語言規(guī)定字符串要由數(shù)值0結(jié)束。常見的字符串由char構(gòu)成,也有unsigned

char與其它類型構(gòu)成的字符串。

通過之前的學(xué)習(xí)我們知道,字符串常量以英文符號雙引號“"”作為開始結(jié)束標(biāo)志。那么就會存在一個問題,如果字符串的長度太長怎么辦?C語言規(guī)定反斜杠“\”作為代碼的續(xù)行符,在每行代碼的末尾,代表下面的一行代碼緊接在本行之后,相當(dāng)于是同一行。

除此之外,還可以用雙引號來處理續(xù)行,可以對比一下差別。

后者的排版效果明顯要優(yōu)于前者。

第三個例子中,下面左邊的那段空白字符也會被當(dāng)作字符串的一部分,這樣寫是不對的。

這兩種方式都支持多行代碼的續(xù)行。

4.2.編碼風(fēng)格

既然提到了代碼的排版編輯,那就順便討論一下編碼風(fēng)格。

一些比較嚴(yán)謹(jǐn)?shù)膱F隊會專門制作編碼風(fēng)格約定,保證所有成員產(chǎn)出風(fēng)格一致的代碼。

我們的示例代碼都做了縮進處理,這樣做的好處是突出代碼的層次感,比較容易看出邏輯關(guān)系。一般語句塊要做縮進處理,下一層的代碼向右縮進4個空格的位置,縮進位置可以在編輯工具里設(shè)置。

除此之外,標(biāo)識符的命名規(guī)范是編碼風(fēng)格的重點。命名的原則之一是顧名思義,名字不能太短。但也有例外,C語言有個不成文規(guī)定,整型的循環(huán)變量一般命名為i、j、k等。一般如果變量只是作用于小范圍之內(nèi),不一定要嚴(yán)格遵守,但是如果變量跨越成百上千行還需要引用,再采用i、j、k這樣的變量名就不合適了。

之前還沒提到注釋這方面,這里就順便介紹一個有關(guān)代碼的注釋。C語言的代碼注釋有兩種格式,一種是多行注釋(注釋塊,以符號“/*”開始,符號“*/”結(jié)束),一種是單行注釋(在一行代碼之后以兩個正斜杠“//”開始注釋)。

注釋的主要作用是幫助理解代碼的可讀性,讓代碼閱讀者更容易理解作者編寫代碼的思路和意圖。

C語言的語句塊有兩種風(fēng)格。

一般來說,程序員比較認(rèn)可第二種風(fēng)格,也更普遍一些。第一種風(fēng)格主要是排版更加緊湊一點,在文章里面展示更合適一些。

4.3.字符型

單字節(jié)字符串里面,以ASCII字符最為常用。我們知道char類型可表示-128~127區(qū)間的整數(shù),其中ASCII字符以0~127區(qū)間為主,里面包括52個大小寫英文字母、10個阿拉伯?dāng)?shù)字和各種標(biāo)點符號,此外還有若干不可見字符。

反斜杠“\”可以作為轉(zhuǎn)義字符,用來表示不可見字符和其它字符。不可見字符里面比較常用的有空白符、制表符'\t'、回車符'\r'與換行符'\n',由于反斜杠的作用,所以用兩個反斜杠'\\'表示反斜杠本身。其中回車符是指光標(biāo)回到本行的行首,換行是指光標(biāo)移到下一行,但橫向位置不變。但是現(xiàn)在一般沒分這么仔細,一般地微軟公司軟件常用回車符加換行符來另起一個新行,其它系統(tǒng)就只用一個換行符起新行。

之前的printf輸出字符串,多數(shù)都帶有換行符,這樣在輸出一行之后,光標(biāo)就移動到下一行。有時需要在同一行連續(xù)輸出字符,就不能加換行符。scanf輸入格式盡量不要用這些字符。

ASCII字符有很多應(yīng)用,比如現(xiàn)在常見的html與json,熟悉這些字符可以提高工作效率。

4.4.格式串

前面示例代碼中的主要是printf/scanf的格式串,格式串的用法很多樣,不容易一下子掌握,要靠日常積累。

目前常用的有字符'%c'、整數(shù)'%d'、浮點數(shù)'%f'與雙精度'%lf',還有字符串'%s'。如果要輸出百分號'%'怎么辦?對了,是兩個百分號'%%'。

輸出格式串還可以指定寬度,比如'%2d',如果整數(shù)超過2位數(shù)字,就按照原本的長度完整顯示出來。浮點數(shù)可以指定有效數(shù)字與小數(shù)位數(shù),比如'%8.2f'。

輸出格式串還可以指定填充字符,比如'%02d',前面用阿拉伯?dāng)?shù)字0來填充,還可以用'%.6d'格式。

編譯代碼,運行程序。

輸入格式串還可以跳過一個數(shù)值,比如'%*d',在輸入時候遇到一個整數(shù),舍去它的值,如果預(yù)期的整數(shù)沒出現(xiàn),函數(shù)返回相應(yīng)的信息。

4.5.返回值

一般的教程中,很少會提到printf/scanf的返回值,但其實它們的返回值非常重要。其中,printf的返回值會告訴我們輸出了多少個字符,而scanf的返回值會告訴我們總共讀取到多少個變量值。

在“cex006.c”文件中輸入以下代碼并保存。

在這個程序中,我們先把重置3個變量,以便觀察之后的輸入是否生效。輸入變量之后將顯示scanf的返回值,接著輸出變量的值。注意對比第9、11行代碼,由于后者忽略了中間一個字符,因此參數(shù)里面就少了ch變量。

編譯代碼,運行程序。

第一段輸入,顯示讀取到3個變量,得到的數(shù)值也跟初始值不同,說明輸入時正常的。第二段的輸入由于限定了'%*c'格式,因此中間那個字符被忽略了,最后得到2個變量。

再次運行程序,這次輸入不合理的數(shù)值,檢查運行結(jié)果有什么不一樣。

這次輸入的數(shù)值,在后面的部分出現(xiàn)不是數(shù)字的字符,由于限定了'%d'格式,因此只讀到中間的字符部分。之后的輸出也可以看出來,變量inum2數(shù)值沒有還是之前重置的0。

對于上一節(jié)的四則運算小程序,我們用新掌握到的方法進一步完善一下。

在“cex007.c”文件中輸入以下代碼并保存。

在第8行,對scanf的返回值做出判斷,如果不足3個,程序提前退出。后面部分不做調(diào)整,下面列出完整的代碼。

完善之后的程序能夠檢測輸入的數(shù)值是否正常,對于不正常的數(shù)值不再繼續(xù)往下運行,從而避免得出錯誤的結(jié)果。日常我們寫程序也要養(yǎng)成這樣的習(xí)慣,要對一些可能出錯的情況做出預(yù)判,避免一些不必要的BUG。

本節(jié)的內(nèi)容一些教程中都沒有提供,這些知識點在實踐中很有用。初學(xué)者在掌握C語言基本語法之后,要留意積累常用的知識點。后文也會根據(jù)進度需要適當(dāng)提供一些編程技巧與實踐經(jīng)驗,相信能達到很好的效果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容