C語言語法 轉義字元的作用

2021-10-08 16:14:01 字數 2136 閱讀 6545

轉義字元

轉義字元是一類特殊的字元

有一些字元無法通過鍵盤輸入(你在鍵盤上可能找不到對應的按鍵)或者在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

a

因為\xa是換行符,但是顯然編譯器把aa當作了我輸入的十六進製制數,而aa太大了因此沒有輸出成功

也就是說在用十六進製制表示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 從實際專案開發的角度回答問題,切忌...