Lenguaje C --- función de escaneo

Punto de conocimiento 1: fórmula de uso de la función Scanf

           1) scanf es una función de parámetro variable;

           2) El primer parámetro de scanf es una cadena;

scanf("%hhd %hd %d %ld %f %lf",&a,&b,&c,&d,&e,&n);

           3) El primer parámetro de scanf es el carácter coincidente y la especificación de conversión;

scanf("%hhd %hd %d %ld %f %lf",&a,&b,&c,&d,&e,&n);\\算引号里面是需要输入的字符串以及转换规范

 #Tenga en cuenta: al ingresar, debe ingresarlo en forma de la primera cadena; de lo contrario, no se obtendrá el resultado correcto;

Ejemplo 1:

        La primera cadena de scanf es "%hhd %hd %d %ld %f %lf", y cada especificación de conversión está separada por espacios. Entonces la entrada debe estar separada por espacios, como 1 2 3 4 5,6 7,8  ; 

Ejemplo 2:

        La primera cadena de scanf es "%hhd,%hd,%d,%ld,%f,%lf", y cada especificación de conversión usa split. Luego, la entrada debe estar separada por comas, como 1,2,3,4,5.6,7.8;

Ejemplo 3:

       La primera cadena de scanf es "%hhd+%hd-%dx%ld/%f~%lf", y la especificación de conversión usa +-x/~ para separarla. Luego necesitas ingresar 1+2-3x4/5.6~7.8 así;   

           4) Los parámetros posteriores de scanf son la ubicación de almacenamiento de los datos una vez completada la conversión;

                 a) Si scanf almacena el binario convertido en una variable básica, agregue & antes del nombre de la variable;

                 b) Si scanf almacena la cadena en una matriz de caracteres, no es necesario agregar & al nombre de la matriz de caracteres;

           5) El método de escritura y la cantidad de la especificación de conversión deben corresponder a los tipos y cantidades de parámetros posteriores;

               a) hhd corresponde a char ;

               b) hd corresponde a short ;

               e) d corresponde a int ;

               d) ld corresponde a long ;

               e) f corresponde a float ;

               f) lf corresponde al doble ;

Punto de conocimiento 2: el uso de la función scanf

          1) Haga coincidir la cadena de entrada con el primer parámetro (primero, la función scanf lee la cadena de entrada. Luego, scanf hará coincidir la cadena de entrada con la cadena del primer parámetro para encontrar la cadena de entrada Correspondencia uno a uno entre subcadenas en y especificaciones de conversión);

           2) Convertir caracteres a binario de acuerdo con la especificación de conversión (el proceso de conversión comienza después de que la subcadena coincide con la especificación de conversión. scanf utilizará diferentes métodos de conversión para convertir la subcadena a binario de acuerdo con la especificación de conversión correspondiente a la subcadena);

indicador de longitud especificación de conversión Convertir a algún tipo de binario
S.S d carbonizarse
h d corto
ninguno d En t
yo d largo
todos d largo largo
S.S tu carácter sin firmar
h tu corto sin firmar
ninguno tu entero sin firmar
yo tu largo sin firmar
todos tu sin firmar mucho tiempo
ninguno F flotar
yo F doble
ninguno C Tabla de códigos ASCLL correspondientes a caracteres
ninguno s Código ASCII correspondiente al carácter de la cadena.

scanf("%hhd %hd %d %ld %f %lf",&a,&b,&c,&d,&e,&n);
子串 "1" 对应转换规范 "%hhd" ,将转换为char类型的二进制表示,1字节
子串 "2" 对应转换规范 "%hd" ,将转换为short类型的二进制表示,2字节
子串 "3" 对应转换规范 "%d" ,将转换为int类型的二进制表示,4字节
子串 "4" 对应转换规范 "%ld" ,将转换为long类型的二进制表示,4字节
子串 "5.6" 对应转换规范 "%f" ,将转换为float类型的二进制表示,4字节
子串 "7.8" 对应转换规范 "%lf" ,将转换为double类型的二进制表示,8字节

           3) Poner el binario convertido en una variable;

Punto de conocimiento 3: varios tipos de demostraciones de errores

          1) La longitud es correcta pero el tipo es incorrecto;

#include <stdio.h>
int main()
{
long long ll;
scanf("%lf", &ll);
printf("%lld\n", ll);
printf("%f\n", ll);
return 0;
}

#Ingresamos la cadena "123.45", que coincidía con la especificación de conversión "%lf". A continuación, la cadena "123.456" se convertirá en una representación binaria de tipo doble, de 8 bytes. Finalmente, estos 8 bytes se asignan a la variable de tipo long long ll. Ahora la variable ll es un número entero que contiene un binario de tipo doble. Usamos %d para imprimir ll y el resultado debe ser incorrecto. ¿Y qué si usamos %f para imprimir? %f tomará 8 bytes de binario y los convertirá de acuerdo con las reglas binarias de tipo doble. Como resultado, se obtuvo el resultado correcto.

          2) El valor de la cadena de entrada es mayor que el rango de valores del tipo de conversión;

#include <stdio.h>
int main()
{
short s;
scanf("%hd", &s);
printf("%d\n", s);
return 0;
}

 

 #Ingresamos la cadena "2147483467", que coincidía con la especificación de conversión "%hd". A continuación, la cadena "2147483467" se convertirá en una representación binaria de tipo corto, 2 bytes. El rango de valores del tipo corto es -32767~32768 y 2147483467 no se puede instalar con corto. Por lo tanto, no se pueden obtener resultados correctos.

        3) La variable no puede contener el resultado de la conversión;

#include <stdio.h>
int main()
{
short s;
scanf("%d", &s);
printf("%d\n", s);
return 0;
}

 #Ingresamos la cadena "2147483467", que coincidía con la especificación de conversión "%d". A continuación, la cadena "2147483467" se convertirá a una representación binaria de tipo int, 4 bytes. Finalmente, los datos convertidos de 4 bytes son recibidos por las variables de tipo corto s y se pierden 2 bytes. Por lo tanto, no se pueden obtener resultados correctos.

        4) Cómo evitar errores;

#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", n);
return 0;
}

#Ingresamos la cadena "2147483467", que coincidía con la especificación de conversión "%d". A continuación, la cadena "2147483467" se convertirá a una representación binaria de tipo int, 4 bytes. Finalmente, los datos convertidos de 4 bytes son recibidos por la variable n de tipo int. Resultado correcto.

@@ Cuando utilice scanf, tenga en cuenta que el valor de la cadena de entrada debe coincidir con la especificación de conversión y el tipo de variable que recibe el resultado de la conversión para obtener el resultado correcto.

Punto de conocimiento cuatro: caracteres y cadenas

          1) Introduzca caracteres;

#include <stdio.h>
int main()
{
char c;
scanf("%c", &c);
printf("%d %c\n", c, c);
return 0;
}

#Ingresamos la cadena "A", que coincide con la especificación de conversión "%c". A continuación, la cadena "A" se convertirá a una representación binaria de tipo char (su decimal es 65), 1 byte. Finalmente, los datos convertidos de 1 byte son recibidos por la variable de tipo char c. Cuando imprimimos c usando %d, se genera el valor 65. Al imprimir con %c, se genera el carácter A.

#include <stdio.h>
int main()
{
char c;
scanf("%hhd", &c);
printf("%d %c\n", c, c);
return 0;
}

 

          2) Introduzca una cadena;

#include <stdio.h>
int main()
{
char str[10];
scanf("%s", str);
printf("%s", str);
return 0;
}

  # No existe una variable de cadena en lenguaje C, las cadenas se almacenan en matrices de caracteres. Dado que la cadena de entrada se almacena en una matriz de caracteres, no se agrega ningún & al parámetro siguiente str. Aún no hemos hablado de las matrices, por lo que no continuaremos ampliando esta parte por ahora.

Punto de conocimiento 5: la función scanf es diferente de la función printf

          1) No es necesario agregar los parámetros posteriores de la función printf con &, mientras que scanf requiere una dirección, por lo que es necesario agregar & para las variables básicas, pero no para la matriz;

          2) Los parámetros de printf se actualizarán a int porque las variables más pequeñas que int y float se actualizarán a double. Por lo tanto, la especificación de conversión d se puede utilizar para char, short e int. La especificación de conversión f se puede utilizar para flotante y doble. Sin embargo, scanf envía directamente el resultado de la conversión a la variable receptora y debe utilizar estrictamente la especificación de conversión.

Supongo que te gusta

Origin blog.csdn.net/m0_73463638/article/details/127133555
Recomendado
Clasificación