Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ostavio09 en 10 Diciembre 2014, 03:04 am



Título: problemas con string Urgente
Publicado por: ostavio09 en 10 Diciembre 2014, 03:04 am
tengo un problema con la lectura de caracteres con espacios por que solo me pide el primero y el resto se lo salta no se más que hacer necesito una solucion lo antes posible porfavor

#include <stdio.h>
#include <string.h>


struct contac {
   char nombre[15];
   char email[20];
   char direccion[40];
   char telefono[15];
};

void agregar_contacto(struct contac contactos[]);

int main(){
   struct contac contactos[10];

   agregar_contacto(contactos);

   printf("Nombre es %s\n", contactos[0].nombre);
   printf("email es %s\n", contactos[0].email);
   printf("direccion es %s\n", contactos[0].direccion);
   printf("telefono es %s\n", contactos[0].telefono);

   return 0;
}

void agregar_contacto(struct contac contactos[]){
   int i;
   int n=1;
   for(i=0;i<n;i++){
      printf("Ingrese el nombre\n");
      scanf("%[^\n]", contactos.nombre);

      printf("Ingrese el email\n");
      scanf("%[^\n]", contactos.email);

      printf("Ingrese la direccion\n");
      scanf("%[^\n]", contactos.direccion);

      printf("Ingrese el numero de telefono\n");
      scanf("%[^\n]", contactos.telefono);

   }
}


Título: Re: problemas con string Urgente
Publicado por: rir3760 en 10 Diciembre 2014, 03:29 am
Cuando publiques código fuente por favor utiliza las etiquetas de código. Estas se agregan mediante el cuadro desplegable con el texto "GeSHi" en la pagina de composición de mensajes, solo tienes que seleccionar ahí el lenguaje (C, C++, etc.).

----

El problema que mencionas se debe al uso en la llamada a scanf del especificador "%[^\n]", con el lees todos los caracteres de la linea menos el '\n', este se queda en el bufer de la entrada estándar y causa que todas las siguientes llamadas (a la mentada función) terminen de inmediato. La solución mas fácil es utilizar " %[^\n]", el espacio antes del símbolo de porcentaje es critico ya que con el se descarta primero el espacio blanco.

Otra opción para leer por linea es fgets. Por ultimo en la función main solo imprimes el primer registro, supongo falta ahí un bucle para imprimirlos todos.

Un saludo