專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

轉(zhuǎn)義字符、格式控制問(wèn)題總結(jié)

作者:龔平   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年03月14日   【字體:

    最近的一系列的公司筆試,也來(lái)不及總結(jié)一下,雖然都是一些小公司但是還是有很多值得總結(jié)的內(nèi)容。很多的內(nèi)容都是自己沒(méi)有認(rèn)真看書導(dǎo)致的,主要的問(wèn)題就是格式控制、轉(zhuǎn)義字符串等問(wèn)題,說(shuō)實(shí)在的都是一些小問(wèn)題,但是把握不準(zhǔn)就會(huì)導(dǎo)致問(wèn)題的出現(xiàn)。
 
    轉(zhuǎn)義字符是容易出題目的地方,記得沒(méi)錯(cuò)的我應(yīng)該是好幾次出錯(cuò)啦,今晚好好的復(fù)習(xí)了一下。主要需要注意的轉(zhuǎn)義字符如下所示:\n,\t,\b,\r,\f,\\,\',\",\ddd,\xhh,這些轉(zhuǎn)義字符在ASCII中都有固定的值,在求解字符串長(zhǎng)度的過(guò)程中很容易出現(xiàn)錯(cuò)誤,每種轉(zhuǎn)義字符都有自己的作用。需要注意的是在\ddd和\xhh這兩個(gè)轉(zhuǎn)義字符,其中\(zhòng)ddd中的d是只0-7的三個(gè)數(shù)字,而\xhh中的h可以是從0-9a-f之間的字符。但是需要注意的是\xhh可以是兩個(gè)字符或者一個(gè)字符,這需要我們?cè)趯?shí)際情況下進(jìn)行分析。在\ddd中,需要注意\后的三個(gè)數(shù)字的值,不能大于7。
    比如下面的字符串:

 

    char Str[]="abc\n\r\f\t\b\\\'\"\123\789\x78\xfg";

    上面這個(gè)字符串的長(zhǎng)度就是18。這種就是比較復(fù)雜的情況了,這種比較復(fù)雜的情況只有搞清楚轉(zhuǎn)義字符的作用才會(huì)計(jì)算出字符串的長(zhǎng)度,因此在分析字符串的長(zhǎng)度時(shí)我們需要考慮轉(zhuǎn)義字符的問(wèn)題。

    printf的格式問(wèn)題,該函數(shù)的返回值是字符串的字節(jié)數(shù),這種返回可以在sprintf中實(shí)現(xiàn)字符串的多次打印問(wèn)題,可以參看銳捷的筆試題。printf的打印存在各種格式,其中比較容易被考試的就是附加格式說(shuō)明字符:

    l  用來(lái)實(shí)現(xiàn)長(zhǎng)整型整數(shù),可以加在格式符d、o、x、u前面。

    m(代表一個(gè)正整數(shù))數(shù)據(jù)的最小寬度

    n (代表一個(gè)正整數(shù)) 對(duì)實(shí)數(shù),表示輸出n位小數(shù),對(duì)字符串表示截取的字符串個(gè)數(shù)。

    -  輸出的數(shù)字或者字符在域內(nèi)向左靠。

    上面的四種附加格式都是筆試中經(jīng)常要考的內(nèi)容,雖然都是小問(wèn)題但是卻是失分的地方,說(shuō)明了我們的基礎(chǔ)不過(guò)關(guān)。特別是當(dāng)字符串采用附加格式輸出時(shí)就比較容易出錯(cuò)啦。

 

    %ms,輸出的字符串占m列,如果字符串本身長(zhǎng)度大于m,則突破m的限制,將字符串全部輸出。若串長(zhǎng)小于m,則將左補(bǔ)空格。

    %-ms,若串長(zhǎng)小于m,則在m的返回內(nèi)字符串向左靠,右補(bǔ)空格。

    %m.ns,輸出占m列,但只取字符串左端n個(gè)字符,這n個(gè)字符輸出在m列的右端,左補(bǔ)空格。

    %-m.ns,其中m,n和%m.ns相同,n個(gè)字符輸出在m列的左端,右補(bǔ)空格。當(dāng)n>m,m自動(dòng)取值為n,即正常輸出n個(gè)字符。
    %m.nf,輸出的數(shù)據(jù)占m列,其中n位小數(shù)。如果數(shù)據(jù)長(zhǎng)度小于m,則左端補(bǔ)空格。
    %-m.nf與%m.nf只是使輸出的數(shù)值向左端靠,右端補(bǔ)空格。

   還需要注意的是打印百分號(hào)采用"%%"實(shí)現(xiàn)的。   

   scanf的格式設(shè)置,和printf有一定的相似性,但是也有一定的區(qū)別。scanf不能限制小數(shù)點(diǎn)的寬度,只有位域?qū)挾�,沒(méi)有n值,還需要注意存在一個(gè)忽略符"*",比如%*3d,忽略掉3位整數(shù),跳過(guò)不賦值給變量。

   l   用于輸入長(zhǎng)度整形數(shù)據(jù)

   h   用于輸入短整型數(shù)據(jù)

   域?qū)?指定輸入數(shù)據(jù)所占的寬度,域?qū)挒檎麛?shù)。

   *   表示本輸入項(xiàng)在讀入后不賦給相應(yīng)的變量。

    今天就簡(jiǎn)要的總結(jié)一下基本的格式,雖然這些都是基本的不能再基本的知識(shí),但是筆試就只能這樣啦。

關(guān)閉窗口

相關(guān)文章