formatting i o printf
Este tutorial analiza el uso y ejemplos de funciones como printf, sprintf, scanf que se utilizan para formatear la entrada / salida en C ++:
En nuestros tutoriales anteriores de C ++, hemos visto que podemos realizar operaciones de Entrada-Salida en C ++ usando cin / cout.
Además de usar estas construcciones, también podemos hacer uso de la biblioteca C. Usando la biblioteca de entrada y salida estándar de C (cstdio, equivalente de C ++ para el encabezado stdio.h en lenguaje C), realizamos operaciones de E / S usando 'flujos' que operan con dispositivos físicos como teclados (entrada estándar), impresoras, terminales (salida estándar ) o cualquier otro tipo de archivo compatible con el sistema operativo.
=> Consulte los tutoriales de capacitación detallados de C ++ aquí.
Los flujos no son más que una entidad abstracta que se utiliza para interactuar con dispositivos físicos de manera uniforme. Todas las transmisiones tienen características similares y son independientes de los dispositivos de medios físicos.
En los siguientes temas de este tutorial, aprenderemos en detalle sobre algunas funciones, es decir, printf, sprint y scanf.
Lo que vas a aprender:
- C ++ printf
- C ++ sprintf
- C ++ scanf
- scanf / printf vs. cin / cout en C ++
- Preguntas frecuentes
- Conclusión
C ++ printf
La función printf en C ++ se usa para escribir la salida formateada en stdout.
Prototipo de función:
int printf (formato const char *,…);
Parámetros:
formato => Un puntero a una cadena terminada en nulo escrita en el flujo de archivos. Consta de caracteres junto con un especificador de formato opcional que comienza con%. El especificador de formato se reemplaza por los valores apropiados que siguen a la cadena de formato.
… => Otros argumentos adicionales que especifican los datos a imprimir en el orden en que se especifica el formato.
Valor devuelto:
algoritmo de ordenación por inserción de c ++
Éxito => printf devuelve el número de caracteres devueltos.
Fracaso => Valor negativo
Descripción:
La función printf se define en el encabezado. Las funciones printf escriben la cadena a la que apunta el puntero 'formato' en la salida estándar stdout. La cadena de formato puede contener especificadores de formato que luego son reemplazados por las variables pasadas a la función printf como argumentos adicionales (después de la cadena de formato).
Especificador de formato utilizado en la función printf ()
Una forma general de especificador de formato es
|_+_|A continuación se muestra una descripción de cada una de las partes del especificador de formato:
- % signo: Este es un signo de% inicial
- Banderas: Pueden tener los siguientes valores:
- -: justifica a la izquierda el resultado dentro del campo. Por defecto, justificado a la derecha.
- +: El signo del resultado adjunto al comienzo del valor, incluidos los resultados positivos.
- Espacio: en ausencia de un signo, el espacio se adjunta al comienzo del resultado.
- #: Especifique una forma alternativa de conversión.
- 0: se utiliza para números enteros y de coma flotante. Actuar como ceros iniciales en ausencia de espacio.
- Ancho: Especifica el ancho de campo mínimo en forma de * o un valor entero. Esto es opcional.
- Precisión: Especifica la precisión con un '.' Seguido de un * o un número entero o nada. Esto también es opcional.
- Largo: El argumento opcional que especifica el tamaño del argumento.
- Especificador: Este es un especificador de formato de conversión.
Varios especificadores de formato utilizados en C ++ son los siguientes:
No | Especificador | Descripción |
---|---|---|
7 | tu | Convierte un entero sin signo en una representación decimal. |
1 | % | Imprime un%. |
2 | c | Imprime un solo carácter. |
3 | s | Imprime una cadena. |
4 | d / i | Convierte un entero con signo en una representación decimal. |
5 | o | Convierte un entero sin signo en una representación octal. |
6 | x / X | Convierte un entero sin signo en una representación hexadecimal. |
8 | f / F | Convierte un número de punto flotante en una representación decimal. |
9 | y / E | Convierte un número de punto flotante a una notación de exponente decimal. |
10 | Automóvil club británico | Convierte un número de punto flotante en un exponente hexadecimal. |
11 | g / G | Convierte un número de coma flotante a una notación decimal o de exponente decimal. |
12 | norte | Número de caracteres escritos hasta ahora por esta llamada de función. |
13 | pag | Un puntero que apunta a la secuencia de caracteres definida por la implementación. |
A continuación se muestra un ejemplo completo de programación en C ++ que demuestra la función printf discutida anteriormente.
Ejemplo de printf de C ++
|_+_|Producción:
El programa anterior usa varias llamadas a la función printf y notamos que cada llamada a printf usa varios especificadores de formato que discutimos anteriormente. El especificador de formato% .3f denota un valor flotante con hasta 3 decimales. El resto de las llamadas a printf muestran los valores de carácter, decimal, octal y hexadecimal.
C ++ sprintf
La función Sprintf en C ++ es similar a la función printf excepto con una diferencia. En lugar de escribir la salida en stdout de salida estándar, sprintf escribe la salida en un búfer de cadena de caracteres.
Prototipo de función:
int sprintf (char * buffer, const char * formato,…)
Parámetros:
buffer => Puntero a un búfer de cadena en el que se escribirá el resultado.
Formato => Puntero a una cadena terminada en nulo que se escribe en la secuencia de archivos.
Nota: La cadena de formato utilizada en la función sprintf es la misma que la que se describe como parte de la descripción de la función printf.
… => Otros argumentos adicionales que especifican los datos a imprimir en el orden en que se especifica el formato.
Valor devuelto:
éxito => Devuelve el número de caracteres escritos en el búfer suficientemente grande excluyendo el carácter nulo de terminación.
Fracaso => Se devuelve un valor negativo.
Descripción:
La función Sprintf se define en el encabezado. La función sprintf se usa para escribir una cadena apuntada por el formato al búfer de cadenas. El formato de cadena puede contener especificadores de formato que comienzan con% que se reemplazan por los valores de las variables que se pasan a la función sprintf () como argumentos adicionales.
Veamos un programa de ejemplo en C ++ que muestra el uso de la función sprintf.
Sprintf Ejemplo
|_+_|Producción:
En el ejemplo anterior, primero, escribimos una cadena formateada en un búfer de caracteres mybuf usando la función sprintf. Luego mostramos la cadena a stdout usando cout. Finalmente, mostramos el número de caracteres escritos en el búfer mybuf.
C ++ scanf
La función scanf en C ++ lee los datos de entrada de la entrada estándar stdin.
Prototipo de función:
int scanf (formato const char *,…)
Parámetros:
formato => Puntero a una cadena terminada en nulo que define cómo leer la entrada. Esta cadena de formato consta de especificadores de formato.
… => Argumentos adicionales que reciben entrada de datos. Estos argumentos adicionales están en secuencia según el especificador de formato.
Valor devuelto:
éxito => Devuelve una cantidad de caracteres leídos.
matchingFailure => Devuelve cero si se produce un error de coincidencia antes de que se asigne el primer argumento de recepción.
falla de entrada => Devuelve EOF si se produce un error de entrada antes de que se asigne el primer argumento de recepción.
Descripción:
La función Scanf () se define en el encabezado. Esta función lee los datos de stdin y los almacena en las variables proporcionadas.
Especificador de formato utilizado en la función scanf ()
El formato general para la cadena de formato de la función scanf () es:
|_+_|Por lo tanto, el especificador de formato tiene las siguientes partes:
- Carácter sin espacios en blanco: Estos son los caracteres excepto% que consumen un carácter idéntico del flujo de entrada.
- Carácter de espacio en blanco: Todos los caracteres de espacio en blanco consecutivos se consideran un carácter de espacio en blanco. Lo mismo ocurre con las secuencias de escape.
- Especificación de conversión: Tiene el siguiente formato:
- %: Carácter que especifica el comienzo.
- *: Se llama carácter de supresión de asignación. Si está presente, el scanf no asigna el resultado a ningún parámetro de recepción. Este parámetro es opcional.
- Ancho de campo: Parámetro opcional (un entero positivo) que especifica un ancho máximo de campo.
- Largo: Especifica el tamaño de recibir un argumento.
El Especificador de formato de conversión puede ser el siguiente:
No | Especificador de formato | Descripción |
---|---|---|
7 | x / X | Coincide con un entero hexadecimal sin signo. |
1 | % | Coincide con el% literal. |
2 | c | Coincide con un solo carácter o varios caracteres hasta el ancho. |
3 | s | Coincide con la secuencia de caracteres que no son espacios en blanco hasta el ancho especificado o el primer espacio en blanco. |
4 | D | Coincide con decimal. |
5 | I | Coincide con un entero. |
6 | o | Coincide con un entero octal sin signo. |
8 | tu | Coincide con un entero decimal sin signo. |
9 | a / A, e / E, f / F, g / G | Coincide con el número de coma flotante. |
10 | (colocar) | Coincide con la secuencia no vacía de caracteres del conjunto dado. Si está precedido por ^, entonces los caracteres que no están en el conjunto coinciden. |
12 | norte | Devuelve el número de caracteres leídos hasta ahora. |
13 | pag | Puntero a la secuencia de caracteres específica de la implementación. |
A continuación, implementaremos un programa de muestra para demostrar el uso de la función scanf en C ++
Ejemplo de scanf
|_+_|Producción:
En el programa anterior, leemos dos cadenas de entrada y un número hexadecimal. Luego combinamos las dos cadenas y mostramos la cadena resultante. El número se convierte a decimal y se muestra.
scanf / printf vs. cin / cout en C ++
scanf / printf | cin / costo |
---|---|
Entrada-salida estándar en lenguaje C. | Entrada-salida estándar en lenguaje C ++. |
Definido en 'stdio.h'. | Definido en 'iostream'. |
scanf y printf son funciones que se utilizan para E / S. | cin y cout son objetos de flujo. |
La cadena de formato se utiliza para formatear la entrada y la salida. | Operadores >> y<< are overloaded and used along with cin and cout respectively. No se utiliza ninguna cadena de formato. |
Especificamos el tipo de datos utilizando marcador de posición. | No es necesario especificar el tipo de datos. |
Preguntas frecuentes
P # 1) ¿Puede usar printf en C ++?
Responder: Si. Printf se puede utilizar en C ++. Para usar esta función en un programa C ++, necesitamos incluir el encabezado en el programa.
P # 2) ¿Qué idioma usa printf?
Responder: Printf es la función de salida estándar en lenguaje C. También se puede utilizar en lenguaje C ++ al incluir el encabezado en el programa C ++.
P # 3) ¿Qué es% d en la programación C?
Responder: El valor% d en la función printf se refiere a un valor entero.
P # 4) ¿Por qué se usa & en Scanf?
Responder: El operador & se utiliza para acceder a la ubicación de la memoria. Es una forma abreviada de pasar un puntero a la variable en lugar de pasarla explícitamente.
P # 5) ¿Cuál es la diferencia entre printf () y sprintf ()?
Responder: Ambas funciones printf () y sprintf () son iguales excepto por una diferencia. Mientras printf () escribe la salida en stdout (salida estándar), el sprintf escribe la salida en un búfer de cadena de caracteres.
P # 6) ¿Sprintf null termina?
Responder: sprintf devuelve el número de caracteres almacenados en la matriz de cadenas de caracteres excluyendo el carácter de terminación nulo.
P # 7) ¿Por qué Sprintf no es seguro?
Responder: La función Sprintf no comprueba la longitud del búfer de destino. Por lo tanto, cuando la longitud de la cadena de formato es demasiado larga, la función puede provocar el desbordamiento del búfer de destino. Esto puede conducir a problemas de seguridad e inestabilidad de la aplicación, lo que hace que la función sprintf sea insegura.
Conclusión
En este tutorial, hemos aprendido las funciones de entrada y salida de la biblioteca C: printf, sprintf y scanf que se pueden usar en C ++ al incluir el encabezado que es el equivalente al encabezado C.
Como ya se discutió, las funciones de entrada-salida en usan especificadores de formato y marcadores de posición y necesitamos especificar los tipos de datos de las variables en las que se leen o escriben los datos.
Contrariamente a esto, los objetos de transmisión utilizados en C ++ - cin y cout no utilizan ningún especificador de formato o marcador de posición. Usan sobrecargado >> y<< operators to read in and write the data.
=> Consulte la guía de formación perfecta de C ++ aquí.
Lectura recomendada
- Funciones de cadena de Python
- Funciones de fecha de VBScript: Funciones de formato de fecha, DateAdd y cDate
- Variables y funciones de JMeter
- Funciones de Python
- Funciones de biblioteca en C ++
- Funciones de script de shell de Unix con parámetros y retorno
- Funciones de fecha y hora en C ++ con ejemplos
- Funciones de amigo en C ++