2017-01-04 34 views
0
#include<stdio.h> 
#include<conio.h> 
void main(){ 
printf("Hello%c%cWorld",92,110);/*92 is ASCII value of \ and 110 is ASCII value of n*/ 
getch(); 
} 

以上程序的輸出是Hello \ nWorld。爲什麼printf(「%c%c」,92,110)中的「%c%c」,92,110不作爲轉義序列?

+1

您打印\,然後您打印'n'。這是不正確還是意外? – e0k

+0

\ n不作爲轉義序列 –

+1

因此,您知道@CJKoirala是C預處理器cpp,它將'\ n'轉換爲換行符。一般來說''printf'和C編譯器對'\ n'或其他序列一無所知。 –

回答

1

轉義序列的解釋發生在翻譯階段,而在您的代碼中,僅在序列號的序列在運行時出現

此外,換行,\n不是兩個單獨的char文字\n組合,它是一個單一的值,表示爲NY \n

ASCII table,一個換行具有10

1

在「\ n」轉義序列是由C編譯器解釋並改變到一個新的行字符的ASCII值。這並不意味着'\ n'序列會自動變成換行符。有些東西不得不期待解釋它。

比較:

#include <stdio.h> 
int main(){ 
    printf("Hello%c%cWorld",92,110); 
} 

其輸出Hello\nWorld(字面)

利用該:

#include <stdio.h> 
int main(){ 
    printf("Hello%cWorld",10); 
} 

其輸出

Hello World

與實際換行符(\012八進制,十進制10,或十六進制0x0a

0

ASCII爲\ n爲10不是「\」加「N」試試下面的代碼,你可以得到你想要的東西:

#include<stdio.h> 
#include<conio.h> 
void main(){ 
    printf("Hello%cWorld\n",10); 
    printf("\\nis%d",'\n'); 
    getch(); 
}