2017-01-04 1 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(); 
} 

Ausgabe des obigen Programms ist Hello \ nWorld.Warum "% c% c", 92,110 in printf ("% c% c", 92,110) nicht als Escape-Sequenz fungiert?

+1

Sie drucken \, dann drucken Sie 'n'. Wie ist das falsch oder unerwartet? – e0k

+0

\ n fungiert nicht als Escape-Sequenz –

+1

Und so wissen Sie, @CJKoirala, es ist der C-Präprozessor cpp, der '\ n' in ein Zeilenumbruchzeichen konvertiert. 'printf' und C-Compiler im Allgemeinen wissen nichts über' \ n' oder andere Sequenzen. –

Antwort

1

Die Interpretation der Escape-Sequenz erfolgt in der Übersetzungsphase, während in Ihrem Code die Sequenz zur Laufzeit erscheint.

Darüber hinaus wird die Neue-Zeile, \n kein Kombination von zwei getrenntenchar Literale \ und n, es ist ein einzelner Wert, bezeichnet als ny \n.

Siehe die ASCII table hat ein Neue-Zeile-ASCII-Wert von 10.

1

Das ‚\ n‘ Escape-Sequenz vom C-Compiler interpretiert und in eine neue Zeile geändert. Das bedeutet nicht, dass eine '\ n' Sequenz automatisch in ein Newline-Zeichen umgewandelt wird. Etwas muss erwartet werden, um es zu interpretieren.

Vergleichen Sie dies:

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

Welche Hello\nWorld Ausgänge (buchstäblich)

mit diesem:

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

Welche Ausgänge

Hello World

Mit einem tatsächlichen Newline-Zeichen (\012 in Oktal, 10 in dezimal oder 0x0a in hex)

0

ASCII für ist \ n 10 nicht '\' plus 'n' den folgenden Code versuchen, können Sie bekommen, was Sie wollen :

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