traducida tag lyrics letra jessie etiquetas c quine

lyrics - jessie j price tag letra



Programa que se imprime, ¿cómo funciona? (4)

Esto se puede hacer usando el manejo de archivos. Guarde el programa con cualquier nombre y ponga ese nombre en el directorio abierto en el comando fopen. Como el nombre de mi programa es hello.cpp.

Este es el siguiente programa

#include <stdio.h> #include <iostream> int main() { FILE *fp; fp=fopen("hello.cpp","r"); char ch; while((ch=fgetc(fp))!=EOF) { printf("%c",ch); } }

Me encontré con un programa que se imprime en this sitio, es decir, imprime el código del programa.

El código del programa es:

#include <stdio.h> char *program = "#include <stdio.h>%cchar *program = %c%s%c;%cint main()%c{%cprintf(program, 10, 34, program, 34, 10, 10, 10, 10, 10, 10);%c return 0;%c}%c"; //what is this line doing, what is the use of %c and %s and what properties of %c and %s are being used here? int main() { printf(program, 10, 34, program, 34, 10, 10, 10, 10, 10, 10); //what is this print function doing, and how? return 0; }

Y la explicación dada es:

Los dos trucos clave aquí son usar una cadena con un especificador% s incrustado para permitir que la cadena se contenga a sí misma cuando se imprima, y ​​para usar el especificador de formato% c para permitir la impresión de caracteres especiales como nuevas líneas, que de otro modo no podrían incrustarse en el cadena de salida.

No entendí cómo está funcionando el programa. He mencionado las líneas sobre las que necesito una explicación, cómo funcionan y qué están haciendo. Por favor explique.


Para una mejor comprensión, el program variable podría haber sido escrito así:

"#include <stdio.h>/nchar *program = /"%s/";/nint main()/n..."

La idea es que ejecute el programa, compile su salida, ejecute ese programa y así sucesivamente. Pero esto solo se puede hacer con% c valores 10 para salto de línea y 34 para comillas dobles.


Printf imprime la cadena dada como el primer argumento (en este caso, la cadena en el *program ) sustituyendo los otros argumentos donde tiene% s o% c

% s significa que el argumento es una cadena,% c es un carácter.

Como dice la nota, usa% s para imprimir una copia de la cadena del programa dentro de la cadena del programa; por lo tanto, hace una copia, y usa el% c para imprimir los caracteres 10 (nueva línea) y 34 "


char *program = "#include <stdio.h>%cchar *program = %c%s%c;%cint main()%c{%cprintf(program, 10, 34, program, 34, 10, 10, 10, 10, 10, 10);%c return 0;%c}%c";

Hay un nombre de "puntero" que se usa para almacenar la cadena y% c y% s son especificadores de formato para los argumentos char y string respectivamente.

printf(program, 10, 34, program, 34, 10, 10, 10, 10, 10, 10);

La función printf es imprimir la salida a la consola, 10 aquí es el código ASCII para NEWLINE y 34 para "los parámetros de printf están funcionando

  • Programa, pasando la cadena a imprimir.
  • 10, pasando 10 códigos ASCII para el primer% c (se convertirá en caracteres de nueva línea)
  • programa, pasando la misma cadena nuevamente a% s en el programa para imprimir la misma cadena nuevamente
  • 34, pasando 34 código ASCII para el segundo% c (se convertirá en caracteres dobles qoutes)
  • 10, pasando 10 códigos ASCII para el 3%% c (se convertirá en caracteres de nueva línea)
  • 10, pasando 10 códigos ASCII para el 4%% c (se convertirá en caracteres de nueva línea)
  • 10, pasando 10 códigos ASCII para el 5%% c (se convertirá en caracteres de nueva línea)
  • 10, pasando 10 códigos ASCII para 6%% c (se convertirá en caracteres de nueva línea)
  • 10, pasando 10 códigos ASCII para 7%% c (se convertirá en caracteres de nueva línea)
  • 10, pasando 10 códigos ASCII para 8%% c (se convertirá en caracteres de nueva línea)