¿Cómo puedo imprimir una comilla en C?

4 minutos de lectura

avatar de usuario
mistu4u

En una entrevista me preguntaron

Imprima una comilla usando el printf() función

Yo estaba abrumado. Incluso en su oficina había una computadora y me dijeron que probara. Intenté así:

void main()
{
    printf("Printing quotation mark " ");
}

pero como sospechaba, no compila. Cuando el compilador obtiene la primera " piensa que es el final de la cadena, que no lo es. Entonces, ¿cómo puedo lograr esto?

  • ¿Recuerdas la breve sección sobre personajes de escape al principio de ese libro…?

    – chris

    2 de agosto de 2012 a las 6:41

  • Posible duplicado de ¿Cómo imprimir caracteres especiales explícitamente en C?

    – phuclv

    1 de septiembre de 2016 a las 4:26

avatar de usuario
sune trudslev

Prueba esto:

#include <stdio.h>

int main()
{
  printf("Printing quotation mark \" ");
}

avatar de usuario
Angus

Sin una barra invertida, los caracteres especiales tienen un significado especial natural. Con una barra invertida, se imprimen tal como aparecen.

\   -   escape the next character
"   -   start or end of string
’   -   start or end a character constant
%   -   start a format specification
\\  -   print a backslash
\"  -   print a double quote
\’  -   print a single quote
%%  -   print a percent sign

La declaración

printf("  \"  "); 

le imprimirá las cotizaciones. También puede imprimir estos caracteres especiales \a, \b, \f, \n, \r, \t y \v con una (barra oblicua) precediéndolos.

  • \% está mal – se tratará igual que %. \' no es necesario; puede poner una cita entre comillas dobles así como así.

    – ugoren

    2 de agosto de 2012 a las 8:43

  • Buena captura. Pero no puede imprimir % entre comillas dobles. Pero puede imprimir un signo de percentil usando %%. Como printf(“%%”);

    – Angus

    2 de agosto de 2012 a las 9:01

  • También puedes usar "%" libremente si no está en la cadena de formato (p. ej. printf("print an int using %s\n", "%d"))

    – ugoren

    2 de agosto de 2012 a las 9:06

  • @Angus ¿por qué no? \% trabajo para imprimir un solo %?

    – cokedude

    12 de octubre de 2015 a las 2:23

  • @cokedude: El signo % dentro de printf tiene un significado especial [Format specifier] y no podemos imprimir el signo “%” con printf(“Imprimiendo el \% \n”); .. Sin embargo, si aún desea imprimir el signo %, puede seguir el método de ugoren printf(“Imprimiendo %s \n”,”%d”); => “%” se toma como una cadena y se imprimirá.

    – Angus

    14 de octubre de 2015 a las 6:36

Tienes que escapar de las comillas:

printf("\"");

avatar de usuario
rashok

En el lenguaje de programación C, \ se utiliza para imprimir algunos de los caracteres especiales que tienen un significado especial en C. Esos caracteres especiales se enumeran a continuación

\\ - Backslash
\' - Single Quotation Mark
\" - Double Quatation Mark
\n - New line
\r - Carriage Return
\t - Horizontal Tab
\b - Backspace
\f - Formfeed
\a - Bell(beep) sound

Además de escapar del personaje, también puedes usar el formato %cy utilice el carácter literal como comillas.

printf("And I quote, %cThis is a quote.%c\n", '"', '"');

avatar de usuario
Dmitro Sirenko

tienes que usar escapando de personajes Es una solución a este problema del huevo y la gallina: ¿cómo escribo un “, si lo necesito para terminar un literal de cadena? Entonces, los creadores de C decidieron usar un carácter especial que cambia el tratamiento del siguiente carácter:

printf("this is a \"quoted string\"");

También puede usar ‘\’ para ingresar símbolos especiales como “\n”, “\t”, “\a”, para ingresar ‘\’ mismo: “\\” y así sucesivamente.

Este también funciona:

printf("%c\n", printf("Here, I print some double quotes: "));

Pero si planea usarlo en una entrevista, asegúrese de poder explicar lo que hace.

EDITAR: Siguiendo el comentario de Eric Postpischil, aquí hay una versión que no se basa en ASCII:

printf("%c\n", printf("%*s", '"', "Printing quotes: "));

La salida no es tan buena y todavía no es 100% portátil (se romperá en algunos esquemas de codificación hipotéticos), pero debería funcionar en EBCDIC.

  • Esto es incorrecto. El printf interno se ejecutará primero. Luego se ejecutará el printf externo. Normalmente, los printf anidados se usan para encontrar el número total de caracteres impresos en la consola.

    – Angus

    2 de agosto de 2012 a las 9:36

  • Esto no está mal, solo un poco torcido, y funciona muy bien. Intentalo. Como dices, el printf interno se ejecuta primero, el externo, ¿qué tiene de malo?

    – ugoren

    2 de agosto de 2012 a las 10:27

  • Imprimirá el valor ASCII del número (número de caracteres impresos) generado desde el printf interno.

    – Angus

    2 de agosto de 2012 a las 10:39


  • Sí, imprimirá el valor ASCII del número de caracteres impresos en el printf interno. Así que cuéntalos y búscalo en una tabla ASCII.

    – ugoren

    2 de agosto de 2012 a las 11:40

  • Estoy tentado a votar en contra de la diversión. Sin embargo, el estándar C no especifica que C use ASCII. Por lo tanto, esta respuesta es técnicamente incorrecta.

    –Eric Postpischil

    2 de agosto de 2012 a las 12:14

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad