Funciones de la biblioteca C -scanf()

C 标准库 - <stdio.h>Biblioteca estándar de C - <stdio.h>

Descripción

Funciones de la biblioteca Cint scanf(const char *format, ...)Lee la entrada con formato desde la entrada estándar stdin.

Declaración

A continuación se muestra la declaración de la función scanf().

int scanf(const char *format, ...)

Parámetros

  • format-- Esta es una cadena de C, que contiene uno o más de los siguientes elementos:Caracteres de espacio, caracteres que no son espacioyEspecificadores de formato。

La forma del especificador de formato es:

[=%[*][width][modifiers]type=]

La explicación detallada es la siguiente:

ParámetroDescripción
*Este es un asterisco opcional, que indica que los datos se leen del flujo (stream), pero pueden ignorarse, es decir, no se almacenan en el parámetro correspondiente.
widthEsto especifica el número máximo de caracteres que se leerán en la operación de lectura actual.
modifiersEspecifica un tamaño diferente al del tipo entero (para d, i y n), entero sin signo (para o, u y x) o punto flotante (para e, f y g) para los datos a los que apunta el correspondiente parámetro adicional: h : entero corto (para d, i y n), o entero corto sin signo (para o, u y x) l : entero largo (para d, i y n), o entero largo sin signo (para o, u y x), o doble precisión (para e, f y g) L : doble precisión larga (para e, f y g)
typeUn carácter que especifica el tipo de datos que se va a leer y la forma de leerlos. Consulte la siguiente tabla para más detalles.

Especificadores de tipo de scanf:

TipoEntrada válidaTipo de argumento
%a、%A Lee un valor de punto flotante (válido solo en C99).float *
%cUn solo carácter: lee el siguiente carácter. Si se especifica un ancho width distinto de 1, la función lee width caracteres y los almacena en posiciones consecutivas del arreglo pasándolos mediante el parámetro. No se añade un carácter nulo al final.char *
%dEntero decimal: el signo + o - delante del número es opcional.int *
%e、%E、%f、%F、%g、%GNúmero de punto flotante: incluye un punto decimal, un signo inicial + o - opcional, un carácter posterior e o E opcional, y un exponente decimal. Dos ejemplos válidos son -732.103 y 7.12e4float *
%iLee enteros decimales, octales y hexadecimales.int *
%oEntero octal.int *
%sCadena. Esto lee caracteres consecutivos hasta encontrar un carácter de espacio en blanco (el carácter de espacio en blanco puede ser un espacio, un salto de línea o una tabulación).char *
%uEntero decimal sin signo.unsigned int *
%x、%XEntero hexadecimal.int *
%p Lee un puntero. 
%[] Escanea un conjunto de caracteres. 
%% Lee el símbolo %. 
  • Parámetros adicionales-- Dependiendo de la cadena de formato (format), la función puede necesitar una serie de parámetros adicionales. Cada parámetro contiene un valor que se insertará, reemplazando a cada etiqueta % especificada en el parámetro format. El número de parámetros debe ser igual al número de etiquetas %.

Valor de retorno

Si tiene éxito, la función devuelve el número de coincidencias y asignaciones correctas. Si se alcanza el final del archivo o se produce un error de lectura, devuelve EOF.

Ejemplo

El siguiente ejemplo demuestra el uso de la función scanf().

Ejemplo

#include<stdio.h> int main(void) { int a,b,c; printf("Por favor, ingrese tres números:"); scanf("%d%d%d",&a,&b,&c); printf("%d,%d,%d\n",a,b,c); return 0; }

Compilemos y ejecutemos el programa anterior, lo que producirá el siguiente resultado en modo interactivo:

请输入三个数字:1 2 3
1,2,3

Explicación:

  • 1, &a、&b、&cen&es el operador de dirección, que obtiene las direcciones de memoria de estas tres variables respectivamente.
  • 2, %d%d%des ingresar tres valores en formato decimal. Al ingresar, entre dos datos se pueden usar uno o más espacios, tabuladores o teclas Enter como separadores.
Si se utiliza,para separar los datos de entrada%d, al ingresar, también se debe agregar,:

Ejemplo

#include<stdio.h> int main(void) { int a,b,c; printf("Por favor, ingrese tres números:"); scanf("%d, %d, %d",&a,&b,&c); printf("%d, %d, %d\n",a,b,c); return 0; }

Compilemos y ejecutemos el programa anterior, lo que producirá el siguiente resultado en modo interactivo:

请输入三个数字:1, 2, 3
1, 2, 3

Nota:Al ingresar,antes debe estar inmediatamente después del número, entre el número y,no debe haber espacios entre ellos.

Al ingresar con %c, los espacios y los "caracteres de escape" se consideran caracteres válidos.

Ejemplo

#include<stdio.h> int main(void) { char a,b,c; printf("Por favor, ingrese tres caracteres:"); scanf("%c%c%c",&a,&b,&c); printf("%c,%c,%c\n", a,b,c); return 0; }

Compilemos y ejecutemos el programa anterior, lo que producirá el siguiente resultado en modo interactivo:

$ ./a.out 
请输入三个字符:run
r,u,n
$ ./a.out 
请输入三个字符:r u n
r, ,u

El siguiente ejemplo demuestra cómo recibir una cadena:

Ejemplo

#include <stdio.h> int main() { char str1[20], str2[30]; printf("Por favor, ingrese el nombre de usuario:"); scanf("%s", str1); printf("Por favor, ingrese su sitio web:"); scanf("%s", str2); printf("Nombre de usuario ingresado: %s\n", str1); printf("Sitio web ingresado: %s", str2); return(0); }

Compilemos y ejecutemos el programa anterior, lo que producirá el siguiente resultado en modo interactivo:

请输入用户名:admin
请输入您的网站:www.example.com
输入的用户名:admin
输入的网站:www.example.com

C 标准库 - <stdio.h>Biblioteca estándar de C - <stdio.h>

Otras extensiones