elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Solucionado] ¿La funcion scanf() permite escribir?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Solucionado] ¿La funcion scanf() permite escribir?  (Leído 4,953 veces)
criskapunk

Desconectado Desconectado

Mensajes: 277



Ver Perfil
[Solucionado] ¿La funcion scanf() permite escribir?
« en: 28 Junio 2011, 20:02 pm »

Buenas!

scanf() permite imprimir una string? Tengo el siguiente codigo:

Código
  1. #include <stdio.h>
  2.  
  3. main()
  4. {
  5. /* Ingresa un numero de 4 digitos de la forma XXXX y lo devuelve como X X X X */
  6.  
  7. int num;
  8.  
  9. printf("Ingrese un numero de cuatro digitos:\n");
  10. scanf("%d", &num);
  11. printf("%d %d %d %d", num / 1000, (num / 100) % 10, (num / 10) % 10, num % 10);
  12.  
  13. return 0;
  14. }

Lo que hace es pedir un numero, ejemplo 1234 y devolverlo de la forma 1 2 3 4.

Cambie el codigo y probe con esta linea:

Código
  1. scanf("Ingrese un numero de cuatro digitos: %d", %num);

Cuando lo ejecuto no me aparece el mensaje y si ingreso, por ejemplo, el numero 1234 me devuelve 4202 5 0 0. No es posible imprimir texto con esta funcion? (Lo pregunto porque creo haber leido en un libro que descargue hace poco). Si no es posible, no deberia dar error de sintaxis?

Un saludo y perdon por estas dudas tan basicas  :)


« Última modificación: 29 Junio 2011, 03:00 am por criska » En línea

Oblivi0n


Desconectado Desconectado

Mensajes: 392

Odio las ranas.


Ver Perfil
Re: ¿La funcion scanf() permite escribir?
« Respuesta #1 en: 28 Junio 2011, 20:18 pm »

La funcion scanf es la funcion de entrada de caracteres, para imprimir caracteres tienes printf (entre otras)


En línea

criskapunk

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Re: ¿La funcion scanf() permite escribir?
« Respuesta #2 en: 28 Junio 2011, 20:26 pm »

Si, ya se que para imprimir tengo la funcion printf(), pero tengo la duda de porque si intento escribir texto con scanf() me devuelve esos valores. No deberia darme algun error y ni siquiera compilar?

Un saludo :)
« Última modificación: 28 Junio 2011, 21:27 pm por criska » En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: ¿La funcion scanf() permite escribir?
« Respuesta #3 en: 28 Junio 2011, 21:30 pm »

scanf() espera una entrada con formato, así que scanf() espera que exactamente le des la entrada:
Código:
Ingrese un numero de cuatro digitos: %d
seguida de un número, mira:

Código
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.    int valor;
  5.    scanf("Hola mundo %d", &valor);
  6.    printf("%d\n", valor);
  7.    return 0;
  8. }
  9.  


Código:
┌─[0 leo@leo-945GCT-M ~/Escritorio]$
└─> ./code
Hola mundo 6512
6512
┌─[0 leo@leo-945GCT-M ~/Escritorio]$
└─>


Código:
┌─[130 leo@leo-945GCT-M ~/Escritorio]$
└─> ./code
lalalala 123
12849140
┌─[0 leo@leo-945GCT-M ~/Escritorio]$
└─>
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Acermax

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: ¿La funcion scanf() permite escribir?
« Respuesta #4 en: 28 Junio 2011, 21:31 pm »

scanf espera de primer argumento un string, para poner por ejemplo "%d". Tu realmente le estás pasando un string así que "no haces nada mal" en la llamada a la función.

El problema es que no le pasas lo que espera, que es %d,%s,%x etc... así que te da un resultado aleatorio.

Imagino que es así, ya que yo nunca he trabajado con estas funciones, yo siempre fuí de c++.

EDIT: A la vez que publicaba esto escribía Leo, que seguro que sabe mejor que yo como funciona esta función.
« Última modificación: 28 Junio 2011, 21:33 pm por Acermax » En línea

criskapunk

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Re: ¿La funcion scanf() permite escribir?
« Respuesta #5 en: 29 Junio 2011, 02:26 am »

@Leo

No entiendo tu ultimo codigo. Devuelve eso cuando pones caracteres a imprimir dentro del primer argumento de scanf?
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: ¿La funcion scanf() permite escribir?
« Respuesta #6 en: 29 Junio 2011, 02:31 am »

Lo que pasa es que al poner
Código
  1. scanf("Hola mundo %d", &valor);
Estás diciendo que forzosamente debe de haber la cadena "Hola mundo " antes del número, sino no se asignará correctamente en valor.

Mira la siguiente salida:

Código:
┌─[0 leo@leo-945GCT-M ~/Escritorio]$
└─> ./args
Hola mundo 123
123
┌─[0 leo@leo-945GCT-M ~/Escritorio]$
└─> ./args
Hola mundoo 123
15949812
┌─[0 leo@leo-945GCT-M ~/Escritorio]$
└─> ./args
123
2543604
┌─[0 leo@leo-945GCT-M ~/Escritorio]$
└─> ./args
hola mundo 123
2785268
┌─[0 leo@leo-945GCT-M ~/Escritorio]$
└─> ./args
Hola mundo
123
123
┌─[0 leo@leo-945GCT-M ~/Escritorio]$
└─>

Fijate que solo se asigna correctamente cuando ponemos "Hola mundo " seguido de un número.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
criskapunk

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Re: ¿La funcion scanf() permite escribir?
« Respuesta #7 en: 29 Junio 2011, 02:35 am »

Entonces cuando ponemos caracteres que no sean los especificadores de formato dentro del primer argumento del scanf() estamos obligando a que el usuario escriba esa cadena y a continuacion el entero?

En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: ¿La funcion scanf() permite escribir?
« Respuesta #8 en: 29 Junio 2011, 02:52 am »

Así es, puedes usar "especificadores de formato", mira un ejemplo:
Código
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. int valor;
  5. scanf("%*s %d", &valor);
  6. printf("[%d]\n", valor);
  7. return 0;
  8. }
  9.  

Esto me permite ingresas cosas como:

Código:
┌─[0 leo@leo-945GCT-M ~/Escritorio]$
└─> ./code
foro.elhacker.net 5
[5]
┌─[0 leo@leo-945GCT-M ~/Escritorio]$
└─> ./code
Holaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!! 123
[123]
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
criskapunk

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Re: ¿La funcion scanf() permite escribir?
« Respuesta #9 en: 29 Junio 2011, 02:59 am »

Muchas gracias por las respuestas. Ya esta solucionado :)

Un saludo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
BATCH - Función máquina de escribir
Scripting
carlitos.dll 3 6,891 Último mensaje 3 Octubre 2008, 22:17 pm
por -/lnkx/-
funcion scanf ayuda!
Programación C/C++
Fer995 6 4,642 Último mensaje 30 Octubre 2010, 02:31 am
por Fer995
[Solucionado] Diferencias en scanf
Programación C/C++
Caster 4 1,909 Último mensaje 22 Diciembre 2011, 13:28 pm
por Caster
consola no me permite escribir contraseña ubuntu 11.10 (solucionado) « 1 2 »
GNU/Linux
Paul Young 10 25,456 Último mensaje 20 Octubre 2018, 18:02 pm
por bohemio22
Una aplicación permite escribir correos a los presos rusos
Noticias
wolfbcn 0 629 Último mensaje 18 Marzo 2013, 21:34 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines