Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: lucaslopez0000 en 28 Mayo 2013, 22:52 pm



Título: No me funcionan correctamente las cadenas de formato
Publicado por: lucaslopez0000 en 28 Mayo 2013, 22:52 pm
Hola a todos , como me estaba quebrando la cabeza con este asunto , hice un programa de prueba. Se donde esta el fallo pero no como solucionarlo. La linea en cuestion es scanf("%s__%s" , &str1 , &str2); Se supone que si yo pongo qqq__zzz , deberia guardar qqq en str1 y zzz en str2. La cuestion es que me lo guarda todo en str1 y me deja vacio str2. Es decir , yo esperaba
str1 = qqq
str2 = zzz
pero el programa da
str1 = "qqq__zzz"
str2 = ""
Me estoy quebrando la cabeza y no se como puedo solucionar esto , aunque se que el error esta en la cadena de formato.
Muchas gracias por su ayuda :)


Título: Re: No me funcionan correctamente las cadenas de formato
Publicado por: BlackM4ster en 28 Mayo 2013, 23:22 pm
Código
  1. scanf("%s__%s" , str1 , str2);
Prueba así a ver...


Título: Re: No me funcionan correctamente las cadenas de formato
Publicado por: lucaslopez0000 en 28 Mayo 2013, 23:38 pm
Código
  1. scanf("%s__%s" , str1 , str2);
Prueba así a ver...
Gracias por la respuesta , aunque en el mejor de los casos el compilador pone los ampersand y en el peor da error. En mi caso compila pero sigue igual que antes. Aun asi eso no se debe hacer , scanf recibe direcciones de memoria de las variables donde guarda los datos , no las propias variables ...


Título: Re: No me funcionan correctamente las cadenas de formato
Publicado por: amchacon en 28 Mayo 2013, 23:50 pm
Cuanto ocupa la cadena? Debe tener al menos 4 espacios para guardar qqq (recuerda que es necesario un caracter nulo para indicar el final).


Título: Re: No me funcionan correctamente las cadenas de formato
Publicado por: CCross en 29 Mayo 2013, 00:03 am
De esta forma te deberia funciónar

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    char cad[5], cad1[5];
  6.  
  7.    scanf("%s" "%s", &cad, &cad1);
  8.    printf("%s__%s", cad, cad1);
  9.  
  10.    return 0;
  11. }
  12.  

Saludos


Título: Re: No me funcionan correctamente las cadenas de formato
Publicado por: amchacon en 29 Mayo 2013, 00:27 am
De esta forma te deberia funciónar

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    char cad[5], cad1[5];
  6.  
  7.    scanf("%s" "%s", &cad, &cad1);
  8.    printf("%s__%s", cad, cad1);
  9.  
  10.    return 0;
  11. }
  12.  

Saludos
Los & del scanf sobran. Y aun asi no te compilara porque has puesto dos comillas en un mismo argumento.


Título: Re: No me funcionan correctamente las cadenas de formato
Publicado por: CCross en 29 Mayo 2013, 00:36 am
Los & del scanf sobran. Y aun asi no te compilara porque has puesto dos comillas en un mismo argumento.
Lo acabo de compilar y ejecutar funcióna a la perfección no entiendo por que lo dices  :huh:

Saludos


Título: Re: No me funcionan correctamente las cadenas de formato
Publicado por: rir3760 en 29 Mayo 2013, 01:39 am
La linea en cuestion es scanf("%s__%s" , &str1 , &str2); Se supone que si yo pongo qqq__zzz , deberia guardar qqq en str1 y zzz en str2. La cuestion es que me lo guarda todo en str1 y me deja vacio str2.
Ese es el comportamiento normal de scanf con el especificador de formato "%s": leer una palabra (secuencia de caracteres delimitada por espacio blanco).

Para leer dos secuencias cuyo separador es "__" debes utilizar, por poner un ejemplo:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define NUM_CHARS  80
  5.  
  6. int main(void)
  7. {
  8.   char a[NUM_CHARS];
  9.   char b[NUM_CHARS];
  10.  
  11.   printf("Palabras separadas por \"__\": ");
  12.   fflush(stdout);
  13.   if (scanf(" %[^_]__%[^_\n]", a, b) == 2){
  14.      printf("a: %s\n", a);
  15.      printf("b: %s\n", b);
  16.   }
  17.  
  18.   return EXIT_SUCCESS;
  19. }

----

Código
  1. scanf("%s__%s" , str1 , str2);
Prueba así a ver...
Gracias por la respuesta , aunque en el mejor de los casos el compilador pone los ampersand y en el peor da error. En mi caso compila pero sigue igual que antes. Aun asi eso no se debe hacer , scanf recibe direcciones de memoria de las variables donde guarda los datos , no las propias variables ...
Si str1 y str2 son los nombres de dos arrays de caracteres no es necesario utilizar el operador "dirección de" en la llamada a scanf.

----

De esta forma te deberia funciónar

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    char cad[5], cad1[5];
  6.  
  7.    scanf("%s" "%s", &cad, &cad1);
  8.    printf("%s__%s", cad, cad1);
  9.  
  10.    return 0;
  11. }
Los & del scanf sobran. Y aun asi no te compilara porque has puesto dos comillas en un mismo argumento.
El uso de dos cadenas literales seguidas:
Código
  1. scanf("%s" "%s", &cad, &cad1);
No es un error ya que se concatenan resultando en una sola. Esa llamada a funcion es equivalente a:
Código
  1. scanf("%s%s", &cad, &cad1);

Un saludo


Título: Re: No me funcionan correctamente las cadenas de formato
Publicado por: amchacon en 29 Mayo 2013, 01:42 am
No es un error ya que se concatenan resultando en una sola. Esa llamada a funcion es equivalente a:
Código
  1. scanf("%s%s", &cad, &cad1);
Tomo nota, es una delicia aprender cosas nuevas  :rolleyes:

Lo acabo de compilar y ejecutar funcióna a la perfección no entiendo por que lo dices  :huh:
¿Pero en los & tenía razón?  :silbar:


Título: Re: No me funcionan correctamente las cadenas de formato
Publicado por: CCross en 29 Mayo 2013, 02:12 am
¿Pero en los & tenía razón?  :silbar:

Si los & son redundantes ya que el nombre del array es un puntero inicializado con la dirección
del primer elemento del array de caracteres.

Saludos amchacon  ::)


Título: Re: No me funcionan correctamente las cadenas de formato
Publicado por: lucaslopez0000 en 29 Mayo 2013, 15:10 pm
Muchisimas gracias por responder , la pega es que estoy desde el movil y veo el codigo cortado , luego vere esta pagina desde un PC