elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problemas con string Urgente
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problemas con string Urgente  (Leído 1,585 veces)
ostavio09

Desconectado Desconectado

Mensajes: 1


Ver Perfil
problemas con string Urgente
« 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);

   }
}


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: problemas con string Urgente
« Respuesta #1 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


En línea

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines