最近的一系列的公司筆試,也來不及總結一下,雖然都是一些小公司但是還是有很多值得總結的內容。很多的內容都是自己沒有認真看書導致的,主要的問題就是格式控制、轉義字符串等問題,說實在的都是一些小問題,但是把握不準就會導致問題的出現。
轉義字符是容易出題目的地方,記得沒錯的我應該是好幾次出錯啦,今晚好好的復習了一下。主要需要注意的轉義字符如下所示:\n,\t,\b,\r,\f,\\,\',\",\ddd,\xhh,這些轉義字符在ASCII中都有固定的值,在求解字符串長度的過程中很容易出現錯誤,每種轉義字符都有自己的作用。需要注意的是在\ddd和\xhh這兩個轉義字符,其中\ddd中的d是只0-7的三個數字,而\xhh中的h可以是從0-9a-f之間的字符。但是需要注意的是\xhh可以是兩個字符或者一個字符,這需要我們在實際情況下進行分析。在\ddd中,需要注意\后的三個數字的值,不能大于7。
比如下面的字符串:
char Str[]="abc\n\r\f\t\b\\\'\"\123\789\x78\xfg";
上面這個字符串的長度就是18。這種就是比較復雜的情況了,這種比較復雜的情況只有搞清楚轉義字符的作用才會計算出字符串的長度,因此在分析字符串的長度時我們需要考慮轉義字符的問題。
printf的格式問題,該函數的返回值是字符串的字節數,這種返回可以在sprintf中實現字符串的多次打印問題,可以參看銳捷的筆試題。printf的打印存在各種格式,其中比較容易被考試的就是附加格式說明字符:
l 用來實現長整型整數,可以加在格式符d、o、x、u前面。
m(代表一個正整數)數據的最小寬度
n (代表一個正整數) 對實數,表示輸出n位小數,對字符串表示截取的字符串個數。
- 輸出的數字或者字符在域內向左靠。
上面的四種附加格式都是筆試中經常要考的內容,雖然都是小問題但是卻是失分的地方,說明了我們的基礎不過關。特別是當字符串采用附加格式輸出時就比較容易出錯啦。
%ms,輸出的字符串占m列,如果字符串本身長度大于m,則突破m的限制,將字符串全部輸出。若串長小于m,則將左補空格。
%-ms,若串長小于m,則在m的返回內字符串向左靠,右補空格。
%m.ns,輸出占m列,但只取字符串左端n個字符,這n個字符輸出在m列的右端,左補空格。
%-m.ns,其中m,n和%m.ns相同,n個字符輸出在m列的左端,右補空格。當n>m,m自動取值為n,即正常輸出n個字符。
%m.nf,輸出的數據占m列,其中n位小數。如果數據長度小于m,則左端補空格。
%-m.nf與%m.nf只是使輸出的數值向左端靠,右端補空格。
還需要注意的是打印百分號采用"%%"實現的。
scanf的格式設置,和printf有一定的相似性,但是也有一定的區別。scanf不能限制小數點的寬度,只有位域寬度,沒有n值,還需要注意存在一個忽略符"*",比如%*3d,忽略掉3位整數,跳過不賦值給變量。
l 用于輸入長度整形數據
h 用于輸入短整型數據
域寬 指定輸入數據所占的寬度,域寬為正整數。
* 表示本輸入項在讀入后不賦給相應的變量。
今天就簡要的總結一下基本的格式,雖然這些都是基本的不能再基本的知識,但是筆試就只能這樣啦。