轉義字元
轉義字元是一類特殊的字元
有一些字元無法通過鍵盤輸入(你在鍵盤上可能找不到對應的按鍵)或者在c語言的環境下可能產生歧義
1.避免在某些環境下引起歧義
如果你想要通過printf 打出雙引號,是不能直接打的。比如:
printf("老師說:"1+1=2。" ");
編譯器會報錯。
雙引號是字串的定界符
printf函式的第乙個引數是乙個字串,在編譯器的理解裡第乙個引數為「老師說:」,後面憑空多出現了字元,自然就報錯了。
所以為了打出雙引號,我們就需要使用轉義字元來實現:
printf("老師說:\"1+1=2。\" ");
①\" 表示乙個雙引號
它的作用不只是在printf中
比如你想用字串常量給乙個字元型陣列賦值,而這個字串常量中若包括了雙引號,也需要用轉義字元。
例:
char a[20]="你在\"想peach\"。";
②\\ 表示乙個反斜槓,避免它被解釋為轉義序列符
例 6\n=? 這句話直接用printf打,\n會被解釋為換行符
③\?表示乙個問號(避免解釋為三字母詞)
④ \' 表示乙個單引號
如果你想給乙個字元型變數賦值為單引號,若這麼寫 : char x=『 『』;
編譯器會報錯,只要加個\就不會引起誤解了。
2.用於輸出一些裝置控制符,比如回車,換行,退格等
\b:退格符,使當前行的活躍位置(即游標)後退乙個位置。
\r:回車符,使活躍位置返回當前行的開端。
\t:水平製表符,使活躍位置移動若干個位置(通常是8個)。可以理解為八個空格
\a:警告字元
3.用於表示ascii碼
有兩種形式:
①\ddd ddd表示乙個八進位制數 例:
printf("\141\142\143\144\145");
輸出結果為abcde
因為八進位制的141實際數值為十進位制的97,即對應了字母a的ascii碼值
值得一提的是換行符\012 也可以寫作\12
也就是說打頭的0其實是可以省略的
②\xddd ddd表示乙個16進製制數 例:
printf("1\xa\x30");
輸出結果為
因為十六進製制的30的實際數值是十進位制的48,即對應了字元0的ascii碼值
而十六進製制的\xa(a是十六進製制的10)的實際數值是十進位制的10,對應換行符
乙個有趣的現象:
printf("1\x300shi");
輸出結果為1
printf("1\x30shi");
輸出結果為10shi,也就是正常輸出了
很有可能因為沒有\x300(768)對應的ascii碼值而導致輸出出現了問題
根據這個原理,還有一種可能出現的問題:
printf("a\xaa");
輸出結果為a
我本來是想輸出
a因為\xa是換行符,但是顯然編譯器把aa當作了我輸入的十六進製制數,而aa太大了因此沒有輸出成功a
也就是說在用十六進製制表示ascii碼時要考慮到a~f是會被理解為十六進製制數的一部分的
4.注意點
①正如我前文所提到的,有些字元有不止一種的轉義字元表達方式
如換行符即可以寫作\n,也可以寫作\012(\12),還可以記作\xa(\x0a或\x00a);
但是我們最好使用\n,因為它通俗易懂,便於記憶
②轉義字元應該被看作乙個字元
③若\和它後面的字元不構成轉義字元,則\被看作斜槓
例外:\9 表示9;
我猜想是因為\後面直接跟乙個數字會被編譯器理解為用八進位制數表示ascii碼值
但是八進位制數里沒有9。。。
C語言語法
printf 01f n double 2 1 printf 02f n double 2 1 保留兩位小數 陣列賦值 include memset al,0,sizeof al 輸入浮點數 while scanf lf n eof 字串比較 include char a 11 1234567890...
C語言的轉義字元及其作用
c中定義了一些字母前加 來表示常見的那些不能顯示的ascii字元,如 0,t,n等,就稱為轉義字元。轉義字元 字元值輸出結果 字元 輸出此字元 字元 具有此八進位製碼的字元 字元 輸出此字元 字元 輸出此字元 a警報鈴聲 產生聲音或視覺訊號 b退格鍵 將當前位置後退乙個字元 f換頁符 n換行符 將當...
C語言語法基礎考試
c語言語法基礎考試 第2輪 學員姓名 試卷說明 1 本試卷共 25題,部分來自 intel 微軟 ti等公司的面試題,其餘出自平時基礎課程。2 本試卷主要目的是考查對 c語言本身的理解程式,而非演算法測試。3 所有題目均需相關說明,yes no 型回答均不得分。4 從實際專案開發的角度回答問題,切忌...