C/Visual C - porfavor ayuda!!!

 
Vista:

porfavor ayuda!!!

Publicado por jorge (4 intervenciones) el 07/03/2001 14:43:57
antes que nada, gracias por leerme.
Tengo un problema al introducir datos en llamadas
a scanf, debido a que cuando introduzco datos que
contengan espacios en blanco, los campos que siguen para completar el programa me los pide juntos, osea que es como que cada espacio que introduzco estoy llenando otro campo.
En cambio si introduzco por ej. un nombre de una persona pero sin espacios en blanco el dato que sigue despues me lo pide bien.
Me dijeron que tenia que limpiar el buffer con fflush,pero no funcionó, y que tenia que usar en vez de scanf la funcion gets, porque aveces scanf tenia problemas con datos combinados (osea con espacios en blanco) pero tampoco dio resultado.
Este es el codigo fuente:
#include<stdio.h>
#include<stdlib.h>
#define SIZE 3

int main(void)
{
struct dato {
char nombre[30], email[25], domicilio[25];
int edad, telefono;
} agenda[SIZE];
int i=0;
clrscr();
for (i=0;i<=SIZE;i++)
{
printf("Ingrese nombre:");
scanf("%s",&agenda[i].nombre);
printf("Ingrese email:");
scanf("s",&agenda[i].email);
printf("Ingrese domicilio:");
scanf("%s",&agenda[i].domicilio);
printf("Ingrese edad:");
scanf("%d", &agenda[i].edad);
printf("Ingrese telefono:");
scanf("%d", &agenda[i].telefono);
}
printf("A continuacion se mostrar n los datos almacenados...");
printf("Presione una tecla...");

return 0;

}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:porfavor ayuda!!!

Publicado por Germán B. (143 intervenciones) el 07/03/2001 15:55:08
Efectivamente scanf() presenta esos problemas.
Te recomendaría que tomes cada línea de datos con gets() y que luego, si es necesario, conviertas el dato, por ejemplo a numérico con atoi().
gets() te va a aceptar espacios en el dato, lo que hayas escrito hasta el Enter se almacenará en el string.
Cuidado que no hay control de que el usuario no se exceda en la longitud del buffer (con scanf() tampoco).
Probá y cualquier cosa volvé con nuevas dudas.
G
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:porfavor ayuda!!!

Publicado por claudio (37 intervenciones) el 07/03/2001 21:49:26
Supuestamente tendría que ser suficiente con que coloques fflush(stdin) antes de cada scanf(), sobretodo si se te ocurre mezclar sentencias scanf() con gets().
Con respecto al control de que el usuario no se exeda de la longitud del buffer, podes utilizar la función fscanf() usando como nombre de archivo stdin también asegurate de colocar el fflush(stdin).
Espero haber ayudado :-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:porfavor ayuda!!!

Publicado por linux (4 intervenciones) el 08/03/2001 01:29:03
usar el scanf para leer una cadena no es buena idea te recomiendo que la captures con gets
y no es fflush el comando que te puede limpiar el buffer es flushall() y lo pones una linea antes del gets, el comando gets se usa asi.
gets(nombre arreglo).
que tengas suerte viejo....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar