Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con scanf, intro y espacios en blancos.

Estas en el tema de Problema con scanf, intro y espacios en blancos. en el foro de C/C++ en Foros del Web. Mi problema es el siguiente: [CODE ]void insertar(){ char nombre[20]; char apellidos[30]; char direccion[50]; char dni[9]; printf("Insertar Usuario:\n"); printf("- - - - - - - ...
  #1 (permalink)  
Antiguo 20/07/2008, 13:57
 
Fecha de Ingreso: julio-2008
Mensajes: 1
Antigüedad: 15 años, 9 meses
Puntos: 0
Problema con scanf, intro y espacios en blancos.

Mi problema es el siguiente:

[CODE
]void insertar(){
char nombre[20];
char apellidos[30];
char direccion[50];
char dni[9];

printf("Insertar Usuario:\n");
printf("- - - - - - - - - - \n\n");
printf("Nombre: ");
scanf("%[^\n]",nombre);
printf("Apellidos: ");
scanf("%[^\n]",apellidos);;
printf("Dirección: ");
scanf("%[^\n]",direccion);
printf("DNI: ");
scanf("%[^\n]",dni);
printf("\nRegistro completado");
printf("%s",nombre);
}
[/CODE]

Con esta funcion, necesito por ejemplo en apellidos disponer de espacios en blancos, pero al insertar espacios en blanco el programa termina sin dejarme insertar las demas variables, de esta forma e conseguido meter espacios en blancos en el primero, es decir en nombre, pero una vez que pulso intro, ya las demas variables no me deja meterlas:

Me sale:
apellidos:direccion:dni:

¿Como podria solucionar esto?

Un saludo
  #2 (permalink)  
Antiguo 21/07/2008, 09:08
Avatar de Xinef  
Fecha de Ingreso: marzo-2007
Mensajes: 202
Antigüedad: 17 años, 1 mes
Puntos: 7
Respuesta: Problema con scanf, intro y espacios en blancos.

Puedes usar fgets para leer las cadenas.
  #3 (permalink)  
Antiguo 21/07/2008, 09:26
Avatar de neandertal  
Fecha de Ingreso: enero-2008
Ubicación: Barcelona
Mensajes: 79
Antigüedad: 16 años, 3 meses
Puntos: 1
Mensaje Respuesta: Problema con scanf, intro y espacios en blancos.

Un pequeño detalle, fgets serviria para leer una cadena desde una archivo, pero para leerlo directante de el teclado seria gets.
Esta función lee caracteres hasta que pulsas el intro, pero te leeria bien los espacios.
  #4 (permalink)  
Antiguo 21/07/2008, 09:29
Avatar de Xinef  
Fecha de Ingreso: marzo-2007
Mensajes: 202
Antigüedad: 17 años, 1 mes
Puntos: 7
Respuesta: Problema con scanf, intro y espacios en blancos.

Cita:
Iniciado por neandertal Ver Mensaje
Un pequeño detalle, fgets serviria para leer una cadena desde una archivo, pero para leerlo directante de el teclado seria gets.
Sí, lo que pasa es que gets está desaconsejado por el problema de seguridad que acarrea... puesto que no hace control de límite en la entrada.


Otra opción es crear una pequeña función de lectura carácter-carácter con control de límite... que no es complicado.
  #5 (permalink)  
Antiguo 07/04/2011, 04:03
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
Respuesta: Problema con scanf, intro y espacios en blancos.

Cita:
Iniciado por neandertal Ver Mensaje
Un pequeño detalle, fgets serviria para leer una cadena desde una archivo, pero para leerlo directante de el teclado seria gets.
Esta función lee caracteres hasta que pulsas el intro, pero te leeria bien los espacios.
no, la solución es usar fgets con el argumento stdin en vez de el archivo correspondiente.

Un saludo!
  #6 (permalink)  
Antiguo 07/04/2011, 11:10
 
Fecha de Ingreso: junio-2005
Mensajes: 93
Antigüedad: 18 años, 10 meses
Puntos: 9
Respuesta: Problema con scanf, intro y espacios en blancos.

despues de leer cada cadena agrega lo siguiente

fflush(stdin);
  #7 (permalink)  
Antiguo 07/04/2011, 11:11
 
Fecha de Ingreso: junio-2005
Mensajes: 93
Antigüedad: 18 años, 10 meses
Puntos: 9
Respuesta: Problema con scanf, intro y espacios en blancos.

despues de leer cada cadena agrega lo siguiente

fflush(stdin);
  #8 (permalink)  
Antiguo 07/04/2011, 11:31
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: Problema con scanf, intro y espacios en blancos.

Con el fflush que te mencionan se debe arreglar, agregar al como lo siguiente.

while(getc() != '\n');
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:57.