problemas con string Urgente

Iniciado por ostavio09, 10 Diciembre 2014, 03:04 AM

0 Miembros y 1 Visitante están viendo este tema.

ostavio09

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);

   }
}

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language