301
C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más / uso sentencia scanf con texto en c/c++
« en: 19 de Noviembre 2012, 10:29 »
La sentencia del lenguaje C/C++:
scanf("mes%2d", &mes);
a) Se ejecuta correctamente si se lee el dato: mes3
b) Siempre se ejecuta correctamente
c) Se ejecuta correctamente si se lee el dato: 03
d) No se ejecuta correctamente si se lee el dato: mes1234
RESPUESTA: La respuesta correcta es la a). El procedimiento scanf sirve para pedir datos al usuario y es accesible gracias al módulo de librería stdio. El dato solicitado se almacena en la variable indicada precedida del símbolo &, en este caso la variable es mes y el tipo de la variable no lo sabemos a priori. El término %2d indica que se espera un tipo entero (decimal es entero) con número de caracteres leídos o "tamaño del dato" de 2 caracteres. En este caso "cuidado": al indicar dentro del scanf mes%2d significa que la entrada de usuario esperada es mesXX donde XX representa hasta dos dígitos. scanf se suele utilizar sin texto (el texto se suele poner en un printf anterior) por lo que es fácil confundirse con esta pregunta.
En la opción a) se recibe mes3, es decir, mes y un dígito, lo que coincide con lo esperado.
La opción b) no es cierta porque si lo introducido por el usuario no corresponde a lo esperado la ejecución no es correcta.
La opción c) no es correcta porque no se recibe lo esperado.
La opción d) no es correcta porque la ejecución sí sería correcta, truncándose los dos últimos caracteres.
Pregunta nada sencilla de responder, y además con cierta ambiguedad (porque la opción d) sería discutible). Paciencia.
Se pueden hacer pruebas con este programita:
#include <stdio.h>
#include <stdlib.h>
int main(){
int mes;
printf("Introduzca mes seguido de uno o dos enteros:\n");
scanf("mes%2d", &mes);
printf("El valor después de mes es %d", mes);
return 0;
}
scanf("mes%2d", &mes);
a) Se ejecuta correctamente si se lee el dato: mes3
b) Siempre se ejecuta correctamente
c) Se ejecuta correctamente si se lee el dato: 03
d) No se ejecuta correctamente si se lee el dato: mes1234
RESPUESTA: La respuesta correcta es la a). El procedimiento scanf sirve para pedir datos al usuario y es accesible gracias al módulo de librería stdio. El dato solicitado se almacena en la variable indicada precedida del símbolo &, en este caso la variable es mes y el tipo de la variable no lo sabemos a priori. El término %2d indica que se espera un tipo entero (decimal es entero) con número de caracteres leídos o "tamaño del dato" de 2 caracteres. En este caso "cuidado": al indicar dentro del scanf mes%2d significa que la entrada de usuario esperada es mesXX donde XX representa hasta dos dígitos. scanf se suele utilizar sin texto (el texto se suele poner en un printf anterior) por lo que es fácil confundirse con esta pregunta.
En la opción a) se recibe mes3, es decir, mes y un dígito, lo que coincide con lo esperado.
La opción b) no es cierta porque si lo introducido por el usuario no corresponde a lo esperado la ejecución no es correcta.
La opción c) no es correcta porque no se recibe lo esperado.
La opción d) no es correcta porque la ejecución sí sería correcta, truncándose los dos últimos caracteres.
Pregunta nada sencilla de responder, y además con cierta ambiguedad (porque la opción d) sería discutible). Paciencia.
Se pueden hacer pruebas con este programita:
#include <stdio.h>
#include <stdlib.h>
int main(){
int mes;
printf("Introduzca mes seguido de uno o dos enteros:\n");
scanf("mes%2d", &mes);
printf("El valor después de mes es %d", mes);
return 0;
}