samsung - mejor formato para escanear documentos
Diferencia entre diferentes formatos de escaneo (2)
Esta pregunta ya tiene una respuesta aquí:
- espacios en blanco en el formato cadena (scanf) 4 respuestas
Actualmente me estoy preparando para la escuela de programación revisando el libro de texto. Hay una pregunta en particular que no entiendo y el libro de texto no da la respuesta.
PD: He aprendido algo de C ++ / C # en línea, pero nunca paso por clases de programación adecuadas, así que estoy luchando con algunos de los conceptos.
P: Para cada uno de los siguientes pares de cadenas de formato de scanf, indique si las dos cadenas son equivalentes o no. Si no lo son, muestra cómo se pueden distinguir.
A)
"%d"
versus" %d"
B)"%d-%d-%d"
versus"%d -%d -%d"
C)"%f"
versus"%f "
D)"%f,%f"
versus"%f, %f"
En primer lugar, ni siquiera entiendo lo que hace la pregunta. ¿Qué significa el libro de texto por si las 2 cadenas son o no ''equivalentes''?
Si lo son, ¿podría alguien explicar las diferencias y posiblemente mostrarme cómo se pueden distinguir?
De Wikipedia
espacios en blanco: cualquier carácter en blanco desencadena un escaneo de cero o más caracteres en blanco. La cantidad y el tipo de caracteres en espacios en blanco no necesitan coincidir en ninguna dirección.
scanf
se trata de seguir consumiendo la entrada y obtener lo que te importa. El carácter normal en cadena de formato significa que consume exactamente el mismo carácter y no hace nada más. %d
, %f
podría omitir el espacio en blanco inicial. Entonces, resuma, tenemos:
- A, es lo mismo, porque
%d
omite el espacio principal - B,
%d-%d-%d
es bastante estricto, lee un entero después de exactamente-
y luego otro entero, y así sucesivamente, por lo que lee1-2-3
bien,1- 2- 3
también, pero falla en1 - 2 - 3
. Mientras que, por otro lado,%d -%d -%d
primero omite espacios, lee un número entero, omita espacios, espera caracteres-
, luego salte espacios, y así sucesivamente ... - C, espacios al final no hace la diferencia
- D, es lo mismo, porque
%f
omite espacios principales, también
Entonces la respuesta sería B.
Primero probemos A
: "%d"
versus " %d"
, son cadenas de formato equivalentes para scanf()
.
" "
hará lo siguiente. Nunca falla
1) Escanee y descarte (omita) el espacio en blanco opcional.
2) Después de leer un espacio no blanco o un final de archivo, si no (EOF), la última lectura de caracteres se vuelve a poner en stdin
.
"%d"
intentará 3 cosas (puede fallar)
1) Escanee y descarte (omita) el espacio en blanco opcional.
2) Escanee y convierta el texto numérico que representa un número entero decimal.
3) Después de leer un texto no numérico o de fin de archivo, si no (EOF), la última lectura de caracteres se vuelve a colocar en stdin
.
" %d"
hace las dos cosas anteriores. Es el mismo resultado de simplemente hacer el 2do con "%d"
.
Con los especificadores *scanf()
nota:
Los caracteres de espacio en blanco de entrada (según lo especificado por la función
isspace
) se omiten, a menos que la especificación incluya un especificador[
,c
, on
. C11 §7.21.6.2 8
B
, C
, D
diferencias?
Pase el mouse sobre la sugerencia 1:
Un
" "
antes de un especificadorscanf()
, excepto el 3 indicado anteriormente, es un formato scanf equivalente () como sin él.
Pase el mouse sobre la sugerencia 2:
Solo 1 de 3 equivalentes.
Pase el mouse sobre la sugerencia 3:
Considere las entradas:
"123 -456-789"
"123.456 x" ¿Cuál es el siguiente personaje que se leerá?
B) "%d-%d-%d"
versus "%d -%d -%d"
C) "%f"
versus "%f "
D) "%f,%f"
versus "%f, %f"
Responder:
Awww, ¿De verdad quieres que te den la respuesta?