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 :)
scanf("%s__%s" , str1 , str2);
Prueba así a ver...
Cita de: Black Master en 28 Mayo 2013, 23:22 PM
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 ...
Cuanto ocupa la cadena? Debe tener al menos 4 espacios para guardar qqq (recuerda que es necesario un caracter nulo para indicar el final).
De esta forma te deberia funciónar
#include <stdio.h>
int main()
{
char cad[5], cad1[5];
scanf("%s" "%s", &cad, &cad1);
printf("%s__%s", cad, cad1);
return 0;
}
Saludos
Cita de: CCross en 29 Mayo 2013, 00:03 AM
De esta forma te deberia funciónar
#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.
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
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 PMscanf("%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
#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
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:
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 ::)
Muchisimas gracias por responder , la pega es que estoy desde el movil y veo el codigo cortado , luego vere esta pagina desde un PC