fgets en estructuras

Si eres principiante y tienes alguna consulta entra en este foro.
Responder
Mensaje
Autor
Fernanda19
Mensajes: 1
Registrado: 26/11/2019 5:46 pm

fgets en estructuras

#1 Mensaje por Fernanda19 » 26/11/2019 6:03 pm

Soy nueva en esto de las estructuras.
Tengo que leer un conjunto de datos entre los cuales esta la direccion.
Quiero leerlo con fgets pero al utilizar esta función salta el campo de dirección,no se si exista otra forma de leer la direccion ya que contiene espacios.
Alguien podria ayudarme?

Código: Seleccionar todo

#include <stdio.h>
#include <string.h>
struct datos{
          char nombre[30];
          int edad;
          char direccion[50];
          float  tel;
     };
    struct datos datos[20] ,datos1;
int main(){ 
    int ch,opc,j,a,i,auxx;
    char aux[10],nom[10];

do{
    printf("Cuantas personas son para el formulario?");
    scanf("%i",&a);
    if(a<0 || a>20)
    printf("Error dame un tamaño positivo y menor a 20");
}while(a<0 || a>20);
 for(i=0;i<a;i++){
  printf("Dame el nombre:");
  scanf("%s",datos[i].nombre);
  printf("\nDame tu edad:");
  scanf("%i",&datos[i].edad);
  printf("\nDame tu direccion:");
  fgets(datos[i].direccion,50,stdin);
  printf("\nDame tu telefono:");
  scanf("%f",&datos[i].tel);}
Última edición por mollok el 26/11/2019 9:56 pm, editado 1 vez en total.
Razón: Los códigos deben ir entre etiquetas 'code', botón </>

mollok
Mensajes: 519
Registrado: 30/01/2018 9:47 am
Ubicación: Mallorca, España

Re: fgets en estructuras

#2 Mensaje por mollok » 26/11/2019 10:15 pm

Después de entregar un número queda el salto de línea en el buffer de entrada, antes de usar fgets, o cualquier función para adquirir una cadena, debes sacar ese salto de línea.

Una de las formas más fáciles es:

Código: Seleccionar todo

fseek(stdin, 0, SEEK_END);
Esto lleva al final del archivo stdin su puntero, descartando todo lo que hay, pero como es un Stream se convierte automáticamente en el puntero de inicio con lo que stdin está listo para recibir nuevos datos como si fuera nuevo.
while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}

el pare
Mensajes: 6
Registrado: 04/12/2019 5:40 am

Re: fgets en estructuras

#3 Mensaje por el pare » 04/12/2019 6:48 am

Hola Fernanda:

Según mi poca experiencia esto me ha pasado después de utilizar scanf(), o gets(), pero solo cuando después de haberlo utilizado para obtener carácteres alfanuméricos he vuelto a pedir caracteres alfanuéricos.

Quiero decir, que si pido caráteres numéricos no me pasa.

Yo para solucionarlo vacio el buffer de la entrada estandar (stdin) que normalmente es el teclado

***SIEMPRE*** después de la instrucción scanf() o gets(), utilizo la instrucción

setbuf(stdin, NULL);

Para utilizarla se necesita invocar la directriz #define<stdio.h>

y me olvido de este problema.

Hay gente que utiliza

fflush(stdin)

pero no te lo aconsejo porque no se puede controlar el resultado.

En google hay mucha información de lo inadecuado de utilizar esta última instrucción.

Salu2

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados