Test Foro de elhacker.net SMF 2.1

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 (cpp) [Seleccionar]
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
Cita de: Black Master en 28 Mayo 2013, 23:22 PM
Código (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
#include <stdio.h>

int main()
{
    char cad[5], cad1[5];

    scanf("%s" "%s", &cad, &cad1);
    printf("%s__%s", cad, cad1);

    return 0;
}


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

Código (cpp) [Seleccionar]
#include <stdio.h>

int main()
{
    char cad[5], cad1[5];

    scanf("%s" "%s", &cad, &cad1);
    printf("%s__%s", cad, cad1);

    return 0;
}


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
Cita de: amchacon en 29 Mayo 2013, 00:27 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
Cita de: The_C_Coder en 28 Mayo 2013, 22:52 PM
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:
#include <stdio.h>
#include <stdlib.h>

#define NUM_CHARS  80

int main(void)
{
   char a[NUM_CHARS];
   char b[NUM_CHARS];
   
   printf("Palabras separadas por \"__\": ");
   fflush(stdout);
   if (scanf(" %[^_]__%[^_\n]", a, b) == 2){
      printf("a: %s\n", a);
      printf("b: %s\n", b);
   }
   
   return EXIT_SUCCESS;
}


----

Cita de: The_C_Coder en 28 Mayo 2013, 23:38 PM
Cita de: Black Master en 28 Mayo 2013, 23:22 PM
Código (cpp) [Seleccionar]
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.

----

Cita de: amchacon en 29 Mayo 2013, 00:27 AM
Cita de: CCross en 29 Mayo 2013, 00:03 AM
De esta forma te deberia funciónar

Código (cpp) [Seleccionar]
#include <stdio.h>

int main()
{
    char cad[5], cad1[5];

    scanf("%s" "%s", &cad, &cad1);
    printf("%s__%s", cad, cad1);

    return 0;
}
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:
scanf("%s" "%s", &cad, &cad1);
No es un error ya que se concatenan resultando en una sola. Esa llamada a funcion es equivalente a:
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
Cita de: rir3760 en 29 Mayo 2013, 01:39 AMNo es un error ya que se concatenan resultando en una sola. Esa llamada a funcion es equivalente a:
scanf("%s%s", &cad, &cad1);
Tomo nota, es una delicia aprender cosas nuevas  :rolleyes:

Cita de: CCross en 29 Mayo 2013, 00:36 AM
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
Cita de: amchacon en 29 Mayo 2013, 01:42 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