Todas las formas de scanf() formateado en C

El lenguaje C tiene bibliotecas estándar que permiten la entrada y salida en un programa. La biblioteca de entrada y salida estándar stdio.ho en C tiene métodos para entrada y salida .

scanf(): El método scanf() en lenguaje C, lee el valor de la consola según el tipo especificado. Devuelve un tipo entero, el número de elementos de entrada asignados y emparejados con éxito.

Sintaxis:

int scanf(const char*format, arg1, agr2, arg3, ...);

La función scanf() lee los caracteres de la entrada estándar (teclado), los interpreta de acuerdo con la especificación de conversión en format(const char*format) y almacena el resultado a través de la lista de argumentos coincidentes ( arg1, arg2, arg3, … ). La lista de argumentos, cada uno de los cuales debe ser un puntero, indica dónde se debe almacenar la entrada convertida correspondiente. Se detiene cuando-

  • Agota su string de formato (todas las entradas tomadas)
  • Cuando alguna entrada no coincide con la especificación de control.

Programa 1: Lea los dos valores enteros usando la entrada con formato scanf():

C

// C program to implement the above idea
#include <stdio.h>
  
// Driver Code
int main()
{
    int a, b, c;
    c = scanf("%d %d", &a, &b);
    printf("Number of successful "
           "inputs read : %d",
           c);
  
    return 0;
}

Producción:

Lectura de entradas exitosas :

Successful Inputs

Explicación: dado que ambos valores de entrada son enteros y el especificador de formato en la función scanf() es ‘%d’, los valores de entrada se leen y la función scanf() devuelve el número de valores leídos.

Lectura de entradas fallidas :

Unsuccessful inputs

Explicación: como aquí, el segundo argumento ingresado es una string y no coincide con el especificador de formato ‘%d’ que es un número entero, por lo que scanf no almacenará el valor en el segundo argumento y devolverá 1, ya que solo 1 entrada se lee con éxito , y scanf() terminará aquí.

Nota:  Dado que la lista de argumentos en scanf() debe ser el puntero, es por eso que se escribe &a, &b (&variablename da la dirección de la variable). Si se pierde ‘&’ en la función scanf(), el programa mostrará un comportamiento indefinido y el compilador no mostrará un error.

Programa 2: Lectura de strings usando scanf:

A continuación se muestra el programa C para leer una string usando la entrada con formato scanf():

C

// C program to implement the above idea
#include <stdio.h>
  
// Driver Code
int main()
{
    // Declaring character array
    char str[10];
  
    // & is not used
    scanf("%s", str);
    printf("%s", str);
    return 0;
}

Producción:

Read string

Nota: El & no se usa en el caso de la lectura de strings porque el nombre de la array es un puntero al primer elemento (str[0]). Un punto más a tener en cuenta aquí es que «%s» no lee los caracteres de espacio en blanco (espacio en blanco, salto de línea, etc.). A continuación se muestra el ejemplo de salida para el mismo:

Explicación: cuando scanf() encuentra un espacio en blanco o una nueva línea, comienza a leer el siguiente argumento, si está disponible. por eso aquí solo se lee Hola y no Mundo.

String de formato: si la sintaxis de scanf() se observa cuidadosamente, entonces tiene dos partes:

  1. String de formato.
  2. El número de argumentos.

Todo lo que está entre comillas dobles se denomina string de formato y todo lo que está después de la coma (,) son los argumentos coincidentes. La string de formato puede contener-

  • Se ignoran los espacios en blanco o las pestañas.
  • Caracteres ordinarios (no %), que se espera que coincidan con el siguiente carácter que no sea un espacio en blanco del flujo de entrada.
  • Una especificación de conversión, que consta de lo siguiente:
    1. Personaje %.
    2. Un carácter de supresión de asignación opcional *.
    3. Un número opcional que especifica un ancho de campo máximo.
    4. Una h, l o L opcional que indica el ancho del objetivo.
    5. Un personaje de conversión.

Una especificación de conversión comienza con un carácter de % obligatorio y termina con un carácter de conversión obligatorio. Por ejemplo, d, s, f, i, etc. Cualquier punto 2 – 4 (opcional) si es necesario agregar debe agregarse en el orden entre % y un carácter de conversión.

Entendamos todos estos puntos con un ejemplo:

Ejemplo 1: Hora de lectura en el formato 11: PM (un valor entero seguido de dos puntos (:) y una string).

Read time

Nota: En el ejemplo anterior (:) no se almacena en ninguna variable, es solo para que coincida con el formato de entrada proporcionado.

Programa 3: A continuación se muestra el programa para leer el valor pero no almacenar en una variable:

C

// C program to implement the above idea
#include <stdio.h>
  
// Driver Code
int main()
{
    int x = 4;
  
    // Read but do not store
    // in x
    scanf("%*d", &x);
  
    // Print initialized value
    printf("%d", x);
  
    return 0;
}

Producción

Output

Explicación: La salida es 4, no 10 porque se usa el carácter de supresión de asignación «*», al usar esto, el campo de entrada se salta y no se realiza ninguna asignación.

Programa 4: A continuación se muestra el programa para leer una string, pero se permite un máximo de 4 caracteres:

C

// C program to implement the above idea
#include <stdio.h>
  
// Driver Code
int main()
{
    // Array of 10 character elements
    char str[10];
  
    // Can read maximum four characters
    scanf("%4s", str);
    printf("%s", str);
    return 0;
}

Producción

Output

Explicación: Solo se puede leer un máximo de cuatro caracteres, pero en la entrada, se proporciona el quinto carácter o , que se omite.

Programa 5: Lee un entero pero su tamaño debe ser largo o corto:

C

// C program to implement the above idea
#include <stdio.h>
  
// Driver code
int main()
{
    // For reading long int
    long int x;
    scanf("%ld", &x);
    printf("%ld", x);
  
    // For reading short int
    short int y;
    scanf("%hd", &y);
    printf("%hd", y);
    return 0;
}

Producción:

Output

Carácter de conversión:

Echemos un vistazo a la lista completa de caracteres de conversión:

Carácter de conversión Datos de entrada
d Entero decimal (int*). Por ejemplo, 10, 20.
Nota: 10, 010 ambos significan 10.
i

Entero (int*). El número entero puede estar en formato octal (0(cero) a la izquierda) o hexadecimal a la izquierda 0x o 0X  
Nota:

  • 010 significa 8 porque comienza con 0, por lo que es un número octal y 10 (octal) = 8 (decimal).
  • 10 significa 10 (porque no hay 0 (cero) inicial ni 0x o 0X inicial.
  • 0x10 significa 16 porque comienza con 0x, por lo que es un número hexadecimal y 10 (hexadecimal) = 16 (decimal).
o

Entero octal (con 0 o sin cero inicial) (int *)
Nota: Cualquier número ingresado será tratado como un número octal.

  • 10 significa 8
  • 010 también significa 8
tu Un entero decimal sin signo (int sin signo*).
Nota: solo lee un número positivo si ingresa cualquier número negativo MSB (el bit más significativo no se tratará como un bit de signo y se tomará para el cálculo)
X

Entero hexadecimal (con o sin 0x o 0X al principio) (int *).
Nota: Cualquier número ingresado será tratado como un número hexadecimal

  • 10 significa 16.
  • 0x10 también significa 16.
C Caracteres ( char *). Los siguientes caracteres de entrada (predeterminado 1) se colocan en el lugar indicado, el salto normal sobre el espacio en blanco se suprime, lo que significa que puede leer caracteres de espacio en blanco. Para leer el siguiente carácter que no sea un espacio en blanco, use 1s.
s

String de caracteres (sin comillas) (char*), uso para leer la string.
Nota:

  • Los espacios en blanco no se pueden leer.
  • El tamaño de la variable debe ser de 1 carácter adicional ya que al final se agrega NULL(‘\0’).
mi, f, g Número de punto flotante con signo opcional, punto decimal opcional y exponente opcional (flotante*).
% % literal, no se realiza ninguna asignación.

Lectura de entrada de otra string: sscanf()

En los ejemplos anteriores, la entrada se leyó desde el teclado. Echemos un vistazo al ejemplo de cómo leer la entrada de otras strings. A continuación se muestra el programa C para implementar el concepto anterior:

C

// C program to implement the above concept
#include <stdio.h>
  
// Driver code
int main()
{
    // String from which input
    // to be read
    char str[] = "11:pm";
    int x;
    char time[3];
    sscanf(str, "%d:%s", &x, time);
    printf("%d:%s", x, time);
  
    return 0;
}
Producción

11:pm

Publicación traducida automáticamente

Artículo escrito por mohammadaquib372 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *