一、C語言中的合法整型
首先C語言中的整型有三種表示方式:十進制、八進制和十六進制。(C語言中沒有表示二進制的整型)
十進制:
如 int a = 63; //一個正常的整型
八進制:
如果想用8進制對變量進行賦值則這樣
int a = 077; //八進制給整型賦值
以數字0開頭,由0~7組成
十六進制:
int a = 0x3F; //十六進制給整型賦值
以0x開頭,由0~F組成
所以我們對合法整數的判斷,可以首先從進制判斷入手,
- 若以0開頭,則為八進制,不能出現大於等於8的數字;
- 若以0x開頭,則為十六進制,數字的范圍為0~F;
- 若都不是,則為十進制,要求數字為0~9。
二、C語言中的合法字符
C語言中的字符常量要求以單引號 ' ' 括起來,否則為非法字符。
除了直接表示的字符外,部分為轉義字符比如
'\n' // 換行 '\t' // 制表 '\\' // 斜桿 '\"' // 引號
還有一部分為用八進制或十六進制整型表示的字符,在對應數值前加上斜杠,注意C語言規定不允許使用斜杠加十進制表示字符!
'?' // 直接表示的?字符 '\x3F' // 十六進制表示的?字符 '\077' // 八進制表示的?字符
字符的數值表示時,前面的0可以省略,比如 '\x3F' 其實為 '0x3F' ,而 '\077' 可以寫成 '\77' (不區分大小寫)
!!但,類型為整型時,前面的0則不能省略
- 合法字符必須用單引號括起來
- 除了直接表示,某些特殊字符需要進行轉義,比如斜杠和引號
- 通過斜杠加數值可以表示字符,但只能用十六進制和八進制表示
- 如果沒有x,且出現了大於等於8的數,則為非法字符
-例
1 int main(){ 2 int x = 108, y = 012; 3 printf("%2d, %2d\n", x, y); 4 return 0; 5 }
先是x,%2d表示寬域(不足則前補空格)108長度大於2,所以直接輸出。
然后y,有些人會以為輸出為12,或是012。
其實不然,這里以0開頭,表示八進制。而輸出格式為%2d,十進制,所以正確的結果為10。
輸出為
1 108, 10