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 :
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 :
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:
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:
- String de formato.
- 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:
- Personaje %.
- Un carácter de supresión de asignación opcional *.
- Un número opcional que especifica un ancho de campo máximo.
- Una h, l o L opcional que indica el ancho del objetivo.
- 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).
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
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
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:
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
|
o |
Entero octal (con 0 o sin cero inicial) (int *)
|
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 *).
|
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.
|
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; }
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